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