'this'在类方法中未定义

时间:2019-01-09 01:55:26

标签: javascript class ecmascript-6

这有效:

class C {
    constructor(p1, p2) {
        this.p1 = 0;
        this.p2 = [];
        this.setP1(p1);
        p2.forEach(p => this.addP2(p));
    }
    setP1(p) { this.p1 = p }
    addP2(p) { this.p2.push(p) }
}

let c = new C(10,[20]);
console.log(c);
C { p1: 10, p2: [ 20 ] }

但这不是:

class C {
    constructor(p1, p2) {
        this.p1 = 0;
        this.p2 = [];
        this.setP1(p1);
        p2.forEach(this.addP2); // <- changed here
    }
    setP1(p) { this.p1 = p }
    addP2(p) { this.p2.push(p) }
}

let c = new C(10,[20]);
console.log(c);
addP2(p) { this.p2.push(p) }
                ^ TypeError: Cannot read property 'p2' of undefined

有两件事我不理解:

  • 它为什么起作用?在这两种情况下,setP1都不是boundthis,所以它如何成功更新{第一种情况是{1}}属性?它不应该在p1this并抛出undefined的上下文中执行吗?

  • 为什么它不起作用? Cannot read property 'p1' of undefined显然等同于p2.forEach(p => this.addP2(p));,因为p2.forEach(this.addP2);仅接受一个参数。发生了什么事才能使第一个工作正常,但第二个崩溃呢?

0 个答案:

没有答案