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

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

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

but failed at doing so.

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

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

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

 14 мая 2012 г., 11:56
... но в приведенной выше строке он делаетthis.buffer = false;.

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

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

Решение Вопроса

this.

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

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();
  } 
 };
 02 мая 2018 г., 18:53
плюс 1 за пример кода, который наглядно демонстрирует то, что другие пытались объяснить. Спасибо!
 14 мая 2012 г., 12:12
Вы можете предложить изменить его ответ, а не загромождать сообщение, спасибо.

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

 14 мая 2012 г., 11:54
Это довольноhand waving ответить без примеров и неreal объяснение.
 14 мая 2012 г., 11:53
Это произойдет, если вы не создадите новую область действия функции.

Ваш ответ на вопрос