在我们正在创建的网站上,我们想要将一些常规的javascript功能封装到我们自己的util jQuery插件中。我是创建自定义jQuery插件的新手,所以我发现this page是一个很好的资源。我基本上复制了那里的例子(当然还有我们自己的功能),但我发现我们有一些方法不需要在任何特定的DOM对象上运行。所以,我发现自己只是选择了这样的文件:
$(document).myPlugin("myFunction", "my", "params");
我不喜欢这样一个事实:我只是选择了我的函数中根本没有使用的任何随机元素,所以我用Google搜索了一些并找到了this question。这是很好的信息,但这是一个永远不需要DOM元素来运行该功能的情况。我想也许我可以将两者结合起来。所以,我最初的地方有这个:
(function($) {
var methods = {
//... all my methods
}
$.fn.myPlugin = function(method) {
// Method calling logic
if (methods[method])
{
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
}
else if (typeof method === 'object' || !method)
{
return methods.init.apply(this, arguments);
}
else
{
$.error('Method ' + method + ' does not exist on jQuery.myPlugin');
}
};
})(jQuery);
我只是将其更改为:
(function($) {
var methods = {
//... all my methods
}
$.myPlugin = $.fn.myPlugin = function(method) {
// Method calling logic
if (methods[method])
{
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
}
else if (typeof method === 'object' || !method)
{
return methods.init.apply(this, arguments);
}
else
{
$.error('Method ' + method + ' does not exist on jQuery.myPlugin');
}
};
})(jQuery);
它似乎正如我想要的那样工作。当我想调用一个不需要DOM元素的函数时,我只需要调用$.myPlugin("myFunction1", "my", "params");
,当我想调用特定DOM元素上的函数时,我调用$("#elementId").myPlugin("myFunction2", "my", "params");
在这个非常冗长的解释之后,我的问题是,在这样做时是否有任何潜在的陷阱或问题需要关注?就像我说的那样,它对我来说很有用,但我想知道这样做或任何潜在的问题是否有任何问题?如果有更好的方法来完成同样的事情,请分享。谢谢!