2013-06-05 64 views
0

我有幾個其他的實例添加原型到javascript代碼中的類,它工作得很好,我無法確切地說明爲什麼我剛纔寫的部分拒絕工作。
有問題的部分是:Javascript功能沒有被添加到對象原型

var opt = new Settings; 

function Settings() { 
    this.initjQuerySelectors(); 
    this.sorted_columns_url = this.getSortedColumnsUrl(); 
} 

Settings.prototype.initjQuerySelectors = function() { 
    this.data_store_selector = $('.data_store.display'); 
}; 

Settings.prototype.getSortedColumnsUrl = function() { 
    return this.data_store_selector.val(); 
}; 

,併產生以下錯誤:

Uncaught TypeError: Object #<Settings> has no method 'initjQuerySelectors' 

,當我試圖捕獲錯誤,它說,另外,也沒有方法getSortedColumnsUrl();無論是。

用chrome開發工具來查看代碼,它顯示我添加的Settings原型中確實沒有任何東西,問題是我找不到原因。

任何幫助,將不勝感激。

回答

3

這可能是因爲你錯誤地命令你的代碼,

嘗試先定義的雛形,只有經過實例化對象選擇。

Settings.prototype.initjQuerySelectors = function() { 
    this.data_store_selector = $('.data_store.display'); 
}; 

Settings.prototype.getSortedColumnsUrl = function() { 
    return this.data_store_selector.val(); 
}; 

function Settings() { 
    this.initjQuerySelectors(); 
    this.sorted_columns_url = this.getSortedColumnsUrl(); 
} 

var opt = new Settings; 

編輯:

延長它的原型完全跨瀏覽器支持之前定義的功能。 (感謝@Turnerj的修復)

+0

這工作,謝謝。說實話,在我定義它之前,我沒有把它看作至少一次在我的代碼中啓動一個對象,然後定義原型 - 並且它一切正常。任何想法可能會導致不一致的行爲? – sjmarshy

+0

@sjmarshy:它是一致的。你只能在定義後調用一個函數。請記住,掛起的命名函數 – zerkms

+0

我在Firefox中試過,它不起作用。你需要在設置原型之前聲明'Settings'。 http://jsfiddle.net/YJdks/ vs http://jsfiddle.net/YJdks/1/ – Turnerj