更改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

如果你想了解更多关于
这个
,我建议你学习这个很棒的方法