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



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

最新更新