当我调用一个函数时,“ 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();
为什么代码会这样运行?以及如何解决这个问题
答案 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)
}