Вопрос по javascript – Зачем присваивать `this` для` self` и запускать `self.method ()`?

12

Я читаю источник измангуста

<code>Collection.prototype.onOpen = function () {
  var self = this;
  this.buffer = false;
  self.doQueue();
};
</code>

Я не понимаю, почему автор назначаетthis вself и работаетself.doQueue(), Почему бы просто не запустить

<code>this.buffer = false;
this.doQueue();
</code>

Я новичок в javascript, спасибо за помощь.

Ваш Ответ

5   ответов
2

doQueue() находится внутри блока, который изменит значениеthis такой как другая функция.

В этом случае, однако, он не служит какой-либо цели и, вероятно, был остатком старого кода, который не был изменен обратно.

14

this.

Использованиеme или жеself немного взломать, чтобы обеспечить правильный контекстthis используется, так как в JavaScript область действияthis это вариант. Например, если у вас есть событие, вызывающее функцию в вашем классе,this был бы другим, и не был бы ваш объект, который содержит функцию, но вместо этого объект, который вызвал функцию. Для решения этой проблемы люди часто используютme или жеself чтобы убедиться, что они ссылаются на правильный объект ...this, как в реальном объекте.

3

Collection.prototype.onOpen = function () {
  var self = this;
  this.buffer = false;
  this.onclick = function(){
     //do some other operations here
     //if you refer `this` here then, `this` will refer to present function not the above. so to make sure it is referring to exact object people pass this to `me` or `self`   
     self.doQueue();
  } 
 };
Вы можете предложить изменить его ответ, а не загромождать сообщение, спасибо.
плюс 1 за пример кода, который наглядно демонстрирует то, что другие пытались объяснить. Спасибо!
-2

но оно всегда относится к нужному объекту, а «this»; может нет.

Это довольноhand waving ответить без примеров и неreal объяснение.
Это произойдет, если вы не создадите новую область действия функции.
2

but failed at doing so.

В противном случае вы будете использоватьthis в некоторых функциях,self в других функциях исмесь обоих в других функциях, в зависимости от того, где вы используете объект и если вы используете вложенные функции / обратные вызовы.

Отвсегда присваиватьthis to self и затем, используя последний, у вас есть одно дополнительное назначение в самом начале каждой функции, но выalways использованиеself чтобы получить доступ к объекту.

Однако то, что разработчик сделал в размещенном вами коде, не имеет особого смысла. Он должен либо использоватьself или жеthis оба раза вместо смеси, которая даже не нужна.

... но в приведенной выше строке он делаетthis.buffer = false;.

Похожие вопросы