我很確定這是一個普通的JS問題,而不僅限於Backbone,但是我在學習Backbone時遇到了這個問題。在下面的第一個例子中,我沒有遇到錯誤,但第二個例子不同。你能解釋幕後發生了什麼事情,使Chrome Dev Tools在後一個例子中顯示錯誤,但不是第一個。我最好的猜想是,當某個函數在某個函數中(如初始化)時,它不會立即運行,因爲瀏覽器正在讀取腳本,而如果它是被定義的類的一部分(在本例中爲app.ItemView) ,需要完成對象上下文,以便瀏覽器需要讀取this.model#get以便構建上下文對象。爲什麼將Backbone和Handlebar的上下文放入初始化函數中刪除錯誤?
app.ItemView = Backbone.View.extend({
initialize: function() {
this.context = {
title: this.model.get("title"),
completed: this.model.get("completed")
}
}
});
與
app.ItemView = Backbone.View.extend({
context: {
title: this.model.get("title"),
completed: this.model.get("completed")
}
});
遺漏的類型錯誤:無法讀取未定義
編輯的特性 'GET':它也不會工作,如果在第一個例子ISN上下文沒有正確定義 -
app.ItemView = Backbone.View.extend({
initialize: function() {
this.context.title = this.model.get("title");
this.context.completed = this.model.get("completed");
this.render();
}
});
遺漏的類型錯誤:閱讀mu is too short
的評論後無法讀取的不確定
在第二個例子中'this''是'extend'調用之外的任何東西(可能是瀏覽器中的'window''),它不會是'{context:{...}}'對象,它是被傳遞給'extend'。 –
這是一個愚蠢的問題,但即使還沒有定義一些東西,就像在第一個例子中一樣,javascript會好嗎?所以如果「this」指的是窗口,那麼它將不起作用,但在初始化方法中,是不是「this」指向尚未創建的實例對象?爲什麼沒有JavaScript拋出一個錯誤呢? – akantoword
我認爲,因爲函數可以在不同的對象下執行(例如,通過使用'bind'或通過將函數賦值給另一個對象的屬性),直到函數中的'this'的任何實例運行。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this#As_an_object_method –