Вот выдержка из моего кода:Потеря контекста этого в функции обратного вызова
'use strict'
var VocabApp = function (element, options) {
this.options =
this.$element = null
...
this.controlsHolder =
this.test =
this.init(element, options)
}
VocabApp.prototype.init = function (element, options) {
this.$element = $(element)
this.options = this.getOptions(options)
this.controlsHolder = this.$element.find('nav.controls')
this.test = 'foo'
...
}
VocabApp.prototype.initUI = function() {
console.log(this.controlsHolder)
console.log(this.test)
this.$element.find('.levels').on('click', ".level", _.bind(function (e) {
console.log(this.controlsHolder)
console.log(this.test)
}, this))
}
Почему console.log
первый распечатывают правильный элемент, а затем внутри функции обратного вызова печатает undefined
? Должна ли _.bind
сохранить контекст этого?
Странная деталь: this.test
правильно печатает foo
в обоих случаях!
Я также пробовал использовать $.proxy
и var self = this
безрезультатно.
Спасибо!
Вы пытались отладить/вывести 'this' в веб-инспекторе (или консоли) из вашего обратного вызова? – Jack
Я не вижу никакой декларации 'controlHolder' в' VocabApp' – Daniel
Daniel, я только что обновил свой вопрос. –