在类方法中定义时的匿名函数作用域

时间:2018-12-12 22:03:07

标签: javascript

class Foo {

    constructor() {
        this.func = null;
    }

    a() {
      let self = this;
      this.func = function() {
        console.log(self);
        console.log(this);
      }
      let testFunc = function() {
        console.log('in test func')
        console.log(this);
      }
      testFunc();
    }

    b() {
      console.log('in b')
      this.func();
    }
}

let x = new Foo();
x.a();
x.b();

我希望对xb()的调用可以打印针对该类的'this'对象(对console.log(self)的调用),然后为第二个控制台调用(console.log(this)打印未定义的对象;),因为此上下文中的“ this”位于新的匿名函数中。但是当我运行它时,它会打印相同的“ this”对象。通过调用testFunc()可以看到我期望的确切行为(打印未定义),该调用在前面提到的代码正下方定义。我假定在类方法中定义的匿名函数的行为相同,但显然它们却不相同。任何人都应该对这种行为的行为方式/原因有所了解。谢谢。

0 个答案:

没有答案