2013-06-05 59 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