我创建了一个Javascript命名空间,如下所示:
var MyApp = function() {
return {
someFunction : function(x) {}
alert(MyApp.y);
}
}();
这允许我这样做:
MyApp.someFunction(x);
我希望能够做到以下几点:
MyApp.y = "test"
以便我的someFunction可以访问此变量Y。
关于如何解决这个问题的任何想法?我想保持我的NS语法完整,所以一个适用于我的示例代码的解决方案会很好。
答案 0 :(得分:2)
你所描述的应该有用。 (除非您有语法错误和未使用的参数x
。)
var MyApp = function() {
return {
someFunction : function(x) {
alert(MyApp.y);
}
}
}();
MyApp.y = 'test';
MyApp.someFunction() // alerts 'test'
另一种方法是将外部函数更像是一个构造函数,并将y作为闭包传递:
var MyApp = (function (y) {
return {
y: y,
someFunction: function () {
alert(MyApp.y); // or alert(this.y)
}
}
} ('test'));
MyApp.someFunction(); // alerts 'test'
答案 1 :(得分:2)
我会选择这样的东西:
var MyApp = function() {
var _y = "default value";
return {
someFunction: function(x) {
console.log(_y);
},
setY: function (y) {
_y = y;
}
}
}();
这意味着在为MyApp.someFunction()
分配值之前调用y
是安全的。它还意味着变量的内容保持在命名空间的范围内,例如
console.log(MyApp._y); // undefined
以下是如何使用它:
MyApp.someFunction(); // "default value"
MyApp.setY("new value");
MyApp.someFunction(); // "new value"