У меня есть модель файл, который расслоение плотной выглядитGoogle Closure: Передача «это» в Window.setInterval
goog.provide('model.ErrorLogger');
/**
* @constructor
*/
model.ErrorLogger = function() {
window.onerror = goog.bind(this.errorHandler, this);
this.doInitialSend();
};
goog.addSingletonGetter(model.ErrorLogger);
model.ErrorLogger.prototype.ws_ErrLgr_config = true;
model.ErrorLogger.prototype.doInitialSend = function(){
if (this.ws_ErrLgr_config){
window.setInterval(this.sendReport, this.ws_ErrLgr_config);
}
};
model.ErrorLogger.prototype.sendReport = function(){
// the value of 'this' needs to be of the ErrorLogger model and not windows
if (!this.ws_ErrLgr_config || this.stopped) {
//some more code here
}
}
В конструкторе я вызываю функцию doInitialSend установившее window.setInterval. Теперь в функции sendReport значение «this» неверно. Как правильно передать «это», чтобы получить правильное значение, а не получать окно. Я попытался сохранить значение этого в ссылке, но это тоже не сработало. Например
var that = this;
window.setInterval(that.sendReport, that.ws_ErrLgr_config);
'goog.bind' - это просто pollyfill для' Function.prototype.bind'. Если браузер поддерживает привязку встроенных функций, 'goog.bind' будет использовать его. –
Это действительно здорово. Огромное спасибо. –