这有效:
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
都不是bound到this
,所以它如何成功更新{第一种情况是{1}}属性?它不应该在p1
是this
并抛出undefined
的上下文中执行吗?
为什么它不起作用? Cannot read property 'p1' of undefined
显然等同于p2.forEach(p => this.addP2(p));
,因为p2.forEach(this.addP2);
仅接受一个参数。发生了什么事才能使第一个工作正常,但第二个崩溃呢?