我目前正在使用一些应该可以全局访问的通用方法来公开全局对象,但是我想将其原型方法定义封装在IIFE中,主要是为了能够使用库别名。

为此,我目前在IIFE范围之外声明了全局对象,并在范围内用该对象的新实例覆盖。

这样一来,以后就不可能创建新实例了,我不在乎。并有效地使全局对象可全局访问:

function CustomNamespace(){};
+function ($) {
    CustomNamespace.prototype = {
        constructor: CustomNamespace,
        func1: function (args) {
            // ...
        },
        func2: function (args) {
            // ...
        },
        // ...
    };
    CustomNamespace = new CustomNamespace();
}(window.jQuery || {});

// ...

CustomNamespace.func1();


问题:这被认为是不良做法还是反模式?还是还有其他“优雅”的方式呢?

PS:我意识到这可能是一个琐碎的问题,但是对于此特定案例尚未找到任何答案。

最佳答案

这不适合您吗?

var CustomNamespace = function ($) {
    function MyClass(){};
    MyClass.prototype = {
        constructor: MyClass,
        func1: function (args) {
            // ...
        },
        func2: function (args) {
            // ...
        },
        // ...
    };
    return new MyClass();
}(window.jQuery || {});

// ...

CustomNamespace.func1();

07-26 05:49