В jQuery это обычный шаблон частных утилит, которые может использовать ваша подключаемая функция:
(function($){
$.search=function(xxxx){
// You can use _check() here
};
function _check(xxxx) {
// Do the work that _check does
}
})(jQuery)
(Также обратите внимание, что j
в jQuery
находится в нижнем, а не верхнем регистре.)
Поскольку Я заинтересован в именованных функциях , я обычно делаю еще один шаг:
(function($){
$.search=search;
function search(xxxx){
// You can use _check() here; if you want to pass on `this`, either
// do it as an argument or do this: _check.call(this, xxxx);
}
function _check(xxxx) {
// Do the work that _check does
}
})(jQuery)
В обоих случаях ваша _check
функция полностью приватна для вашего плагина, потому что она ограничена анонимной функцией, которую вы использовали для упаковки вашего плагина.
Примечание: Ваш пример с прототипом устарел. Этот стиль использования Class.create
восходит к v1.5. Поскольку v1.6 был выпущен (четыре года назад), вы делаете это:
var Searcher=Class.create({
initialize:function(xxx){},
search:function(url,para){
//here ,I may use some internal method,
this._check(url,para)
}
_check:function(url,para){}
});
Обратите внимание, как я передаю объект, определяющий методы для прототипа, в Class.create
, не заменяя прототип впоследствии. Прототип v1.6 и выше сделает вам замену прототипа, который вы потеряете, если замените его. Вероятно, также стоит отметить, что ваш _check
метод не является частным, любой может его вызвать. Если вы действительно хотите, чтобы это было приватно, вы можете использовать ту же технику, что и выше:
var Searcher = (function() {
var rv = Class.create({
initialize:function(xxx){},
search:function(url,para){
//here ,I may use some internal method,
_check.call(this, url, para)
}
});
function _check(url,para){}
return rv;
})();
Обратите внимание, что способ вызова _check
меняется. Вот как вы это делаете, если хотите, чтобы this
означало то же самое в _check
, что и в search
, или вы можете просто сделать это аргументом, передаваемым _check
.