Javascript:公开 IIFE 中定义的全局对象

标签 javascript

我目前正在公开一个全局对象,其中包含一些应该可以全局访问的通用方法,但希望将其原型(prototype)方法定义封装在 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();

关于Javascript:公开 IIFE 中定义的全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45169255/

相关文章:

javascript - 使用 Javascript 使元素移动

javascript - 车辆租金计算

javascript - $watch 或 ng-model 绑定(bind)问题?

javascript - 多部分文件上传和服务 : Angular 2

javascript - $(window).blur 事件影响 Iframe

javascript - 如果没有执行callback()怎么办?

javascript - 联系表单 7 - 在表单提交后添加重定向延迟

javascript - 我想在延迟一段时间后在产品li中一一添加淡入淡出效果

javascript - 实现货币格式 Chromecast Sender Chrome

javascript - 在 Angular 2 (ES5) 中绑定(bind)数据