我目前正在使用一些应该可以全局访问的常用方法公开一个全局对象,但是希望将其原型方法定义封装在IIFE中,主要是为了能够使用库别名。
为了实现这一点,我目前在IIFE范围之外声明了全局对象,并使用范围内对象的新实例进行覆盖。
这使得之后无法创建新实例,我不在乎。并有效地使全球对象可以在全球范围内访问:
function CustomNamespace(){};
+function ($) {
CustomNamespace.prototype = {
constructor: CustomNamespace,
func1: function (args) {
// ...
},
func2: function (args) {
// ...
},
// ...
};
CustomNamespace = new CustomNamespace();
}(window.jQuery || {});
// ...
CustomNamespace.func1();
问题:这被认为是不良做法还是反模式?或者还有其他更“优雅”的做法吗?
PS:我意识到这可能是一个微不足道的问题,但是对于这个特定的案例还没有找到任何答案。答案 0 :(得分:2)
这不适合你吗?
var CustomNamespace = function ($) {
function MyClass(){};
MyClass.prototype = {
constructor: MyClass,
func1: function (args) {
// ...
},
func2: function (args) {
// ...
},
// ...
};
return new MyClass();
}(window.jQuery || {});
// ...
CustomNamespace.func1();