我看到關於使用this
的鏈接是jQuery。是的,問題恰恰在於此,但這種情況是完全不同的,所以請刪除無用的鏈接到其他問題並標記爲重複的,因爲這可能會導致對尋找更簡單情況的可憐SO用戶的混淆。運行時拋出的未定義錯誤
此外:我的代碼完全粘貼在這裏,不只是一個片段,而我的代碼根本沒有使用一些複雜的綁定,更基礎。所以這對我來說
一個完整的新問題,這是我的充滿工作代碼
var game = {
status : {
NOT_INITIALIZED : "gamepad:not_initialized",
INITIALIZED : "gamepad:initialized",
},
_selector : null,
_status : null,
init : function(gamepad_selector) {
this._selector = gamepad_selector;
$(this._selector).on(this.status.NOT_INITIALIZED, this.onNotInitialized);
this.setState(this.status.NOT_INITIALIZED); // just to force the first console log
$(this._selector).on(this.status.INITIALIZED, this.onInitialized);
this.setState(this.status.INITIALIZED);
},
setState : function (new_status) {
this._status = new_status;
$(this._selector).trigger(new_status);
},
onNotInitialized: function() {
console.log("onNotInitialized()");
},
onInitialized: function() {
console.log("onInitialized()");
},
}
的切入點是game.init()
通話。
請注意,在init
函數上,我可以使用預定義的狀態之一調用setState
。這工作。
this.setState(this.status.NOT_INITIALIZED);
我試圖避免使用this.setState
,所以我刪除了這個功能,並試圖直接設置this._state
到事件偵聽器。
這的的有意義的部分不工作代碼:
init : function(gamepad_selector) {
....
console.log ("a");
$(this._selector).on(this.status.NOT_INITIALIZED, this.onNotInitialized);
console.log ("b");
$(this._selector).trigger(this.status.NOT_INITIALIZED)
console.log ("c");
....
},
onNotInitialized: function() {
// I can't do this: throws an error
this._status = this.status.NOT_INITIALIZED;
console.log("onNotInitialized()");
},
問題:在運行時我得到這個錯誤:
Cannot read property 'NOT_INITIALIZED' of undefined
相關
this._status = this.status.NOT_INITIALIZED;
呃ror在運行時,不在'編譯'時間(請原諒我),因爲我可以在控制檯日誌中看到a
和b
。但不是c
。
爲什麼我可以在init
中明確使用this.status.NOT_INITIALIZED
而不是onNotInitialized
?
嘗試'的console.log(這)'內部onNotInitialized功能。 – JJJ
JavaScript中沒有編譯時間。 :) –
@Juhana:你是對的!我忘記了事件監聽器中的'this'被引用到事件中涉及的html元素中。但是,請刪除「Mark as duplicated」,因爲這是一個關於在jQuery中使用'this'的情況的'真實世界示例',但是您指出的問題更爲寬泛。 – realtebo