我想知道是否可以在方法中创建一个jQuery私有方法,如下所示:
(function($) {
$.fn.myPublicFunc = function() {
$.fn.myPrivateFunc = function() {
return this;
};
$("a").myPrivateFunc();
return this;
};
}(jQuery));
还是有另一种方法可以加入我的普通私人功能,例如:
var myPrivateFunc = function() {
}
进入jQuery链。对不起我的词汇,我希望你能理解我的观点。
答案 0 :(得分:1)
有几个地方可以创建私人功能:
整个插件的一个副本
使用插件
我推荐#1。这是你如何做到的:
function($) {
$.fn.myPublicFunc = function() {
myPrivateFunc($("a"));
return this;
};
function myPrivateFunc($set) {
// Stuff using `$set` here, for instance
$set.css("color", "green");
}
}(jQuery));
注意私有函数的创建位置:在作用域函数中,你包含了插件的代码。只创建了该函数的一个副本,然后将jQuery集传递给它。
在那里,$set
是myPrivateFunc
应该操作的jQuery集(对象)。
如果您更愿意使用this
,请使用Function#call
进行调用:
function($) {
$.fn.myPublicFunc = function() {
myPrivateFunc.call($("a"));
return this;
};
function myPrivateFunc() {
// Stuff using `this` here, for instance
this.css("color", "green");
}
}(jQuery));
请注意,this
是jQuery集,而不是事件回调中的DOM元素。
答案 1 :(得分:0)
为了使方法具有可链接性,它必须必然是公共的,因此不能作为对象的方法。在JavaScript中,范围是在函数级别设置的,因此myPrivateFunction
仅对$.fn.myPublicFunc
方法可见。
您可以在$.fn
方法的范围内按照惯例定义一个函数,它可以正常工作:
(function($) {
$.fn.myPublicFunc = function() {
var myPrivateFunction = function(elem) {
return elem;
};
myPrivateFunction($("a"));
return this;
};
}(jQuery));
JavaScript函数可以覆盖其上下文,因此使用myPrivateFunction
不带参数的初始目标可以使用JavaScript的本地Function.[call/apply/bind]
方法或使用jQuery $.proxy
方法。以下是一个如何使用原生Function.call()
。
var myPrivateFunction = function() {
return this;
};
myPrivateFunction.call($("a"));
这样做的一个缺点是,myPrivateFunction
假定被调用的上下文不清楚(没有必要的文档),因此JSHint和其他JS链接器会抱怨您的模块遵守strict mode
规则。