Часто в моем коде базовой линии я сталкиваюсь с ситуациями, когда я буду передавать закрытие некоторой функции и потерять контекст «этого».'self = this' vs apply or bind? (Магистраль)
Мое решение в течение некоторого времени было делать то, что я видел некоторые другие делают:
var self = this;
this.deferred.done(function() {
self.render();
});
Или на самом деле я переключился на _this = this
, но это рядом с точкой. Он работает, но он чувствует себя некрасиво, и мне иногда приходится делать это довольно часто. Поэтому я пытаюсь найти лучший способ сделать это. Я узнал, что я мог бы сделать это:
this.deferred.done(function() {
this.render();
}.apply(this));
И я думаю, что я мог бы также использовать подчерк это сделать:
this.deferred.done(_.bind(function() {
self.render();
}, this));
Метод apply
кажется наиболее емким, но я чувствую, что у него есть побочный эффект (Я просто не знаю, что это такое).
Edit:
Взгляните на эту JSbin, где я использую применить аналогичный как я уже говорил: http://jsbin.com/qobumu/edit?js,console
Он работает, но он выдает ошибку, в то же время. Если я изменю apply
на bind
, он работает и не выдает ошибку.
'.apply()' почти наверняка не то, что вы хотите; Я думаю, вы думаете о 'Function.prototype.bind()'. – Pointy
'this.deferred.done (this.render.bind (this))' работает без ввода слова «функция» или обман – dandavis