为了账号安全,请及时绑定邮箱和手机立即绑定

无法在调用时读取未定义的属性 X

无法在调用时读取未定义的属性 X

慕妹3146593 2021-12-02 15:10:48
所以我有一堂课class A {    test() {        return 1;    }    foo() {        return this.baz(this.bar)    }    bar() {        return this.baz(this.test);    }    baz(f){        return f();     }}当我调用方法时 foovar a = new A();a.foo();我得到Uncaught TypeError: Cannot read property 'baz' of undefined    at bar (<anonymous>:9:15)    at A.baz (<anonymous>:12:10)    at A.foo (<anonymous>:6:15)    at <anonymous>:1:3this在调用方法 f() 后,它是如何变得未定义的,我该如何解决这个问题?
查看完整描述

3 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

通过这样做:


return this.baz(this.bar)

你只是传递一个函数没有指定什么this它this是指(无上下文)。所以最终,当你进入baz(f)方法时,你得到一个函数作为参数,而不是类的方法A。所以它this是未定义的。要修复它,您有两个选择,第一个是更改foo()方法:


foo() {

    return this.baz(this.bar.bind(this))

}

第二个是改变baz(f)方法:


baz(f){

    return f.call(this); 

}

这两种解决方案都适用于这种情况。希望能帮助到你


查看完整回答
反对 回复 2021-12-02
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

它从未被定义。您在没有上下文的情况下调用函数 - 所以没有“this”

this.apply(f) 将它绑定到对象


查看完整回答
反对 回复 2021-12-02
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

你也可以使用箭头函数来解决这个问题。


class A {

    test =()=> {

        return 1;

    }

    foo=()=> {

        return this.baz(this.bar)

    }

    bar=()=> {

        return this.baz(this.test);

    }

    baz=(f)=>{

        return f(); 

    }

}


const a = new A()

console.log(a.foo())


查看完整回答
反对 回复 2021-12-02
  • 3 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信