JavaScript失去“ this”上下文,类函数[duplicate]中的函数

问题描述 投票:0回答:2
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的关闭?

我知道如何使其工作(箭头功能)。只想知道为什么。

javascript class closures this
2个回答
0
投票

函数c()不是类的一部分,因此您需要使用Function.prototype.call()作为Function.prototype.call()传递类上下文或使用箭头函数进行声明

this

-1
投票

[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
© www.soinside.com 2019 - 2024. All rights reserved.