Nic*_*ner 4 javascript oop prototype public-method
我不完全确定如何在JS中实现OOP概念.
我有一个完全在其构造函数中声明的类:
function AjaxList(settings)
{
// all these vars are of dubious necessity... could probably just use `settings` directly
var _jq_choice_selector = settings['choice_selector'];
var _jq_chosen_list = settings['chosen_list'];
var _cb_onRefresh = settings['on_refresh'];
var _url_all_choices = settings['url_choices'];
var _url_chosen = settings['url_chosen'];
var _url_delete_format = settings['url_delete_format'];
var jq_choice_selector_form = _jq_choice_selector.closest("form");
if (DEBUG && jq_choice_selector_form.length != 1)
{
throw("There was an error selecting the form for the choice selector.");
}
function refresh()
{
_updateChoicesSelector();
_updateChosenList();
_cb_onRefresh();
};
AjaxList.prototype.refresh = refresh; // will this be called on all AjaxLists, or just the instance used to call it?
// AjaxList.refresh = refresh; // will this be called on all AjaxLists, or just the instance used to call it?
// ...
}
Run Code Online (Sandbox Code Playgroud)
AjaxList有多个实例.当我打电话refresh()
给其中一个时,我只想要一个列表来刷新自己.在以下实例中:
term_list = AjaxList(settings);
term_list.refresh();
Run Code Online (Sandbox Code Playgroud)
该refresh()
调用似乎使所有AjaxLists自行刷新.这样做的正确方法是什么?
我正在使用jQuery,如果它有任何区别.
您不应该在构造函数中重新定义原型函数.如果要创建特权函数,请使用构造函数中的this.methodname = ....
function AjaxList() {
var privateVar = 0;
function privateFunction() {
//...
}
//create a refresh function just for this instance of the AjaxList
this.refresh = function() {
//privileged function, it can access the 'privateVar & privateFunction'
privateVar++;
}
}
//public functions that don't need access to the private variables/functions
AjaxList.prototype.publicFunction=function() {
};
Run Code Online (Sandbox Code Playgroud)
此外,如果要创建适当的对象,则需要更改
term_list = AjaxList(settings);
Run Code Online (Sandbox Code Playgroud)
至
term_list = new AjaxList(settings);
Run Code Online (Sandbox Code Playgroud)