Изменение области видимости внутри объектов JavaScript - PullRequest
0 голосов
/ 28 июня 2018

Я все еще растерялся, когда дело доходит до области при работе с методами объекта. В приведенном ниже коде у меня есть два соседа. У каждого свой метод.

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();

Я понимаю, что когда я вызываю метод соседа mymy, он будет вызывать метод ближнего соседа, потому что я использовал оператор присваивания выше. Чего я не понимаю, так это того, почему «this» всегда будет объектом соседний (Джон), а не объектом соседний (Боб). Может кто-нибудь объяснить простыми словами, почему сосед1 всегда «это»? Спасибо!

1 Ответ

0 голосов
/ 28 июня 2018

this всегда ссылается / указывает на контекст выполнения (откуда вы выполняете функцию, а не от того, где вы пишете функцию). Вы вызываете this.doStuff() на neighbor1 и, следовательно, это всегда указывает на neighbor1.

Если вы хотите больше узнать о this, я бы рекомендовал изучить этот удивительный материал

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...