前段时间我听说最好将代码包装在一个大对象中作为命名空间,以减少全局命名空间的混乱并促进库的导出,所以我尝试了这个。
var wrapper = {
foo: function(){
return 42;
},
bar: this.foo()
};
它失败了,声称“foo未定义”。 在完成对象声明之前调用方法可能很糟糕,所以我移动了bar,它起作用了。
var wrapper = {
foo: function(){
return 42;
},
};
wrapper.bar = wrapper.foo();
我觉得这会变得有点丑陋,特别是对于嵌套的命名空间等等,那么是否有任何变通方法不会让你很难同时看到所有包装器的成员?
答案 0 :(得分:1)
问题在于this
将等于全局背景。您需要像这样访问函数:
var wrapper = {
foo: function(){
return 42;
},
bar: null,
init : function() {
// all initialization code goes here
wrapper.bar = wrapper.foo();
}
};
wrapper.init();
此方法非常适合将代码组织为逻辑块,因此您和未来的开发人员可以轻松地在您的javascript中找到您要查找的内容。
答案 1 :(得分:0)
使用this
之类的东西将不起作用,除非包装器是1)一个函数,2)你实例化它以使用它:
var wrapper = function() {
this.foo = function() { return 42; }
this.bar = this.foo();
};
var wrapperInstance = new wrapper();
alert(wrapperInstance.bar()); // 42
wrapperInstance.foo(); // also works
答案 2 :(得分:0)
var wrapper = {
foo: (function(){
return 42;
})()
};
alert(wrapper.foo);