如何让我的 jQuery 插件代码更漂亮?

发布于 2025-01-02 08:00:55 字数 1432 浏览 0 评论 0原文

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

美人迟暮 2025-01-09 08:00:55

你的第一个例子没有任何问题,它是松散的“模块”模式,除了它可能不必要地重复函数。后一个示例只是如何将匿名函数分配给对象的属性,如果所讨论的函数不需要是对象的属性,则这是不合适的。

通过将函数包装在其他函数中来限制函数的范围是一个基本的 JavaScript 习惯用法,一点也不难看。

但是,如果 foobar 在调用插件函数时不需要访问范围内的变量和参数(并且如果 defaults > 确实是静态的),您可以将它们移出一个级别,这样每次调用插件时就不会重新创建它们:

(function ($) {
    var defaults = {
        someSetting: 'default for some setting'
    };

    function foo(){
        // do stuff
    };

    function bar(){
        // do stuff
    };

    $.fn.MyFancyPlugin= function (settings) { 

        var settings = $.extend({}, defaults, settings);

        return this.each(function (){
            // do more stuff
        });
    };
})(jQuery);

另请注意,我更正了 defaults 初始值设定项的语法 (,而不是=)。


旁注:由于您的插件函数不是构造函数函数,因此 JavaScript 世界中压倒性的约定是使用首字母小写字母的驼峰命名法(例如,myFancyPlugin 而不是 MyFancyPlugin)。

There's nothing at all wrong with your first example, which is loosely the "module" pattern, except it may be duplicating the functions unnecessarily. Your latter example is just how you assign anonymous functions to properties on an object, which is inappropriate if the functions in question don't need to be properties of the object.

Limiting the scope of functions by wrapping them in other functions is a fundamental JavaScript idiom, not ugly at all.

However, if foo and bar don't need access to the variables and arguments in scope when your plug-in function is called (and if defaults is really static), you can move them out a level so they're not recreated every time your plug-in is called:

(function ($) {
    var defaults = {
        someSetting: 'default for some setting'
    };

    function foo(){
        // do stuff
    };

    function bar(){
        // do stuff
    };

    $.fn.MyFancyPlugin= function (settings) { 

        var settings = $.extend({}, defaults, settings);

        return this.each(function (){
            // do more stuff
        });
    };
})(jQuery);

Also note that I corrected the syntax of your defaults initializer (:, not =).


Side note: Since your plug-in function isn't a constructor function, the overwhelming convention in the JavaScript world is to use camelCasing with an initial lower case letter (e.g., myFancyPlugin rather than MyFancyPlugin).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文