函数调用后,“ this”返回未定义

时间:2019-07-11 17:33:02

标签: javascript node.js

当我调用一个函数时,“ this”包含所有“ stuff”,但是当我调用一个调用另一个函数的函数时,“ this”在第二个函数内部返回未定义。

代码:

class test {
  test() {
    console.log(this) // => returns class functions ect..
    this.run(this.test2);
  }
  run(func){
      func()
  }
  test2() {
    console.log(this) // => returns undefined
    this.function3(); // => ERROR
  }

  function3() {
    console.log("hey")
  }
}

var t = new test();

t.test();

为什么代码会这样运行?以及如何解决这个问题

2 个答案:

答案 0 :(得分:2)

啊,那些都是colled闭包。上下文(this)将有所不同,具体取决于从哪个上下文调用该函数。对于javascript,函数是对象,并且与类对象的绑定是week。可以将其与类分离,并与on问题分开使用。这就是为什么当您调用this.someFunc()时,它只为您提供一个功能,而不给该实际实例提供功能。 绕过它的最常见方法是将对象上下文保存到单独的变量中,而不使用this。像这样:

class test {
  var self = this;
  test() {
    console.log(self)
    this.run(self.test2);
  }
  run(func){
      func();
  }
  test2() {
    console.log(self);
    self.function3();
  }

  function3() {
    console.log("hey");
  }
}

答案 1 :(得分:1)

执行传递到run的函数时,它是this指向新的执行上下文,而不是您期望的类的实例。

这可以通过将其执行上下文绑定到该类的实例来“解决”,例如当传递给run

this.run(this.test2.bind(this))

或者我是构造函数,例如

constructor () {
  this.test2 = this.test2.bind(this)
}