因为我想要达到这样的目的:
var SomeModule = (function(parent) {
var self = parent.Module1 = parent.Module1 || {};
self.public_property1 = [];
self.publicMethod1 = function() {
// something here in the Module2
}
return parent;
}(APP || {}));
var SomeOtherModule = (function(parent) {
var self = parent.Module2 = parent.Module2 || {};
self.public_property2 = [];
self.publicMethod2 = function() {
// something here
}
return parent;
}(APP || {}))
我得'Uncaught ReferenceError: APP is not defined'
但那是APP || {}
的重点,不是吗?据我所知,parent
参数必须包含APP对象(如果存在),或者是一个空对象。
我想要的是包含Module1,Module2和任何其他模块的APP对象。
我做错了吗?
谢谢!
答案 0 :(得分:1)
您无法引用未声明的变量。 APP || {}
的重点是获取空对象值,因为APP是声明的并且是假的(它可以是0,未定义,假,NaN ......)。如果它可能是未声明的,您应该使用typeof
运算符来检查它:
(function () { ... })(typeof APP !== 'undefined' ? APP : {})
答案 1 :(得分:0)
你的问题是双重的。
1)您需要在引用它之前在某处声明APP
变量(即使您将变量保留为undefined
)。或者,或者您可以使用typeof
运算符,该运算符在未声明变量时不会抛出错误。
2)当您在{}
的第一个实例中动态创建对象(SomeModule
)时,您实际上并没有保存它的引用回到APP变量,你似乎想重新使用它来进行SomeOtherModule
的第二次实例化。
这是一个固定版本:
var APP = (function(parent) {
var self = parent.Module1 = parent.Module1 || {};
self.public_property1 = [];
self.publicMethod1 = function() {
// something here in the Module2
}
return parent;
})(APP || {});
APP = (function(parent) {
var self = parent.Module2 = parent.Module2 || {};
self.public_property2 = [];
self.publicMethod2 = function() {
// something here
}
return parent;
})(APP || {});
console.log(APP);

正如您在控制台输出中看到的那样,APP
变量现在包含Module1
和Module2
值。
我不完全确定你在这里尝试代表什么样的模式(经典继承?),但是这个修复应该会让你继续前进。