更改javascript对象内部的作用域
在使用对象的方法时,当涉及范围时,我仍然感到困惑。在下面的代码中,我有两个邻居。每个人都有自己的方法更改javascript对象内部的作用域,javascript,object,scope,Javascript,Object,Scope,在使用对象的方法时,当涉及范围时,我仍然感到困惑。在下面的代码中,我有两个邻居。每个人都有自己的方法 var counter = 0; var neighbor1 = { name: 'John', myFunction: function () { console.log(this.name) this.doStuff(); } }; var neighbor2 = { name: 'Bob', doOtherStuff: function () {
var counter = 0;
var neighbor1 = {
name: 'John',
myFunction: function () {
console.log(this.name)
this.doStuff();
}
};
var neighbor2 = {
name: 'Bob',
doOtherStuff: function () {
console.log(this.name);
if(counter>5) {
return false;
} else {
counter++;
this.myFunction();
}
}
};
neighbor1.doStuff = neighbor2.doOtherStuff;
neighbor1.myFunction();
我知道当我调用neighbor1.myFunction方法时,它将调用neighbor2.doOtherStuff方法,因为我使用了上面的赋值运算符。我不明白的是为什么“this”永远是neighbor1对象(约翰),而不是neighbor2对象(鲍勃)。有人能简单地解释一下为什么邻居总是这样吗?谢谢
此
始终指向执行上下文(从执行函数的位置,而不是从编写函数的位置)。您在neight1
处调用this.doStuff()
,因此this总是指向neight1
如果你想了解更多关于这个,我建议你学习这个很棒的方法