class b {
constructor(){
this.name = 'bar'
}
b1(){
console.log('here: ', this.name);
function c() {
console.log('inside c: ', this.name)
}
c();
}
}
let a = new b;
a.b1();
//output:
// here: bar
// inside c: undefined
在这种情况下,当调用a.b1()
时,在函数b1
的范围内,this
上下文绑定到a。但是,当在函数c
中执行函数b1
时,为什么this
上下文丢失了? this
假设函数c
的关闭?
我知道如何使其工作(箭头功能)。只想知道为什么。
函数c()
不是类的一部分,因此您需要使用Function.prototype.call()
作为Function.prototype.call()
传递类上下文或使用箭头函数进行声明
this
[class b {
constructor(){
this.name = 'bar'
}
b1(){
console.log('here: ', this.name);
function c() {
console.log('inside c: ', this.name)
}
c.call(this);
}
}
let a = new b;
a.b1();
不能从闭包中获取,除非您使用箭头函数,而是通过调用函数的方式接收它。
由于this
被直接调用,因此这里指的是c
。
您可以将c声明为箭头函数,以从封闭范围中获得它
undefined