2015-08-17 23 views
0

這裏是我的代碼的摘錄:失去的背景下在回調

'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

我也試過使用$.proxyvar self = this無濟於事。

謝謝!

+0

您是否嘗試過從回調中調試/輸出Web Inspector(或控制檯)中的this'? – Jack

+0

我在'VocabApp'中沒有看到任何'controlsHolder'聲明 – Daniel

+0

Daniel,我剛剛更新了我的問題。 –

回答

1

注意init回調正在改變提到的變量this。$ element.find('nav.controls')並且構造函數也在改變這個變量。

我想說,構造函數或init回調在 initUI之後運行,然後更改controlsHolder的值。

+0

但是this.test正常工作!然而,這也是在兩個地方。 –