0

在我们正在创建的网站上,我们希望将一些通用的 javascript 功能封装到我们自己的 util jQuery 插件中。我对创建自定义 jQuery 插件还很陌生,所以我发现这个页面是一个很好的资源。我基本上复制了那里的示例(当然是我们自己的功能),但我发现我们有一些不需要在任何特定 DOM 对象上运行的方法。所以,我发现自己只是在这样的文档上进行选择:

$(document).myPlugin("myFunction", "my", "params");

我不喜欢我只是选择了在我的函数中根本没有使用的任何随机元素,所以我搜索了一些并找到了这个问题。这是很好的信息,但这是一个永远不需要 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");

在这个冗长的解释之后,我的问题是,这样做时是否有任何潜在的陷阱或问题需要关注?就像我说的那样,它对我很有用,但我想知道这样做是否有任何问题或任何潜在问题?如果有更好的方法来完成同样的事情,请分享。谢谢!

4

0 回答 0