有人可以解释为什么这两种情况下 `this` 不同吗
Can someone please explain why `this` is different in these two cases
let obj = {
one: function(){
this.two();
},
two: function(){
console.log("two");
}
}
let oneFunc = obj.one;
obj.one(); // two
oneFunc(); // TypeError: this.two is not a function
我在 JavaScript 编程已经有一段时间了。我以为我对 this
关键字有非常扎实的掌握。但是,我 运行 今天参与其中,这让我大吃一惊。我不明白为什么会这样。当我调用 oneFunc()
时,this
指的是全局对象。为什么会这样?
this
引用对象,而你在这里所做的是创建一个等于对象方法的函数,因此你失去了对对象的引用。
您可以使用绑定
let obj = {
one: function(){
this.two();
},
two: function(){
console.log("two");
}
}
let oneFunc = obj.one;
oneFunc = oneFunc.bind(obj);
obj.one(); // two
oneFunc(); // TypeError: this.two is not a function
let obj = {
one: function(){
this.two();
},
two: function(){
console.log("two");
}
}
let oneFunc = obj.one;
obj.one(); // two
oneFunc(); // TypeError: this.two is not a function
我在 JavaScript 编程已经有一段时间了。我以为我对 this
关键字有非常扎实的掌握。但是,我 运行 今天参与其中,这让我大吃一惊。我不明白为什么会这样。当我调用 oneFunc()
时,this
指的是全局对象。为什么会这样?
this
引用对象,而你在这里所做的是创建一个等于对象方法的函数,因此你失去了对对象的引用。
您可以使用绑定
let obj = {
one: function(){
this.two();
},
two: function(){
console.log("two");
}
}
let oneFunc = obj.one;
oneFunc = oneFunc.bind(obj);
obj.one(); // two
oneFunc(); // TypeError: this.two is not a function