如何将变量传递到Javascript命名空间
我创建了一个Javascript名称空间,如下所示:如何将变量传递到Javascript命名空间,javascript,namespaces,javascript-namespaces,Javascript,Namespaces,Javascript Namespaces,我创建了一个Javascript名称空间,如下所示: var MyApp = function() { return { someFunction : function(x) {} alert(MyApp.y); } }(); 这使我能够做到: MyApp.someFunction(x); 我希望能够做到以下几点: MyApp.y=测试以便我的someFunction可以访问此变量y 有没有办法解决这个问题?我想保持我的NS语
var MyApp = function() {
return {
someFunction : function(x) {}
alert(MyApp.y);
}
}();
这使我能够做到:
MyApp.someFunction(x);
我希望能够做到以下几点:
MyApp.y=测试以便我的someFunction可以访问此变量y
有没有办法解决这个问题?我想保持我的NS语法不变,这样一个与我的示例代码一起工作的解决方案就更好了。您所描述的应该可以工作。除了语法错误和未使用的参数x 另一种方法是将外部函数视为构造函数,并将y作为闭包传递:
var MyApp = (function (y) {
return {
y: y,
someFunction: function () {
alert(MyApp.y); // or alert(this.y)
}
}
} ('test'));
MyApp.someFunction(); // alerts 'test'
你所描述的应该有用。除了语法错误和未使用的参数x 另一种方法是将外部函数视为构造函数,并将y作为闭包传递:
var MyApp = (function (y) {
return {
y: y,
someFunction: function () {
alert(MyApp.y); // or alert(this.y)
}
}
} ('test'));
MyApp.someFunction(); // alerts 'test'
我会这样说:
var MyApp = function() {
var _y = "default value";
return {
someFunction: function(x) {
console.log(_y);
},
setY: function (y) {
_y = y;
}
}
}();
这意味着在为y赋值之前调用MyApp.someFunction是安全的。这还意味着变量的内容在名称空间的范围内维护,例如
console.log(MyApp._y); // undefined
下面是如何使用它:
MyApp.someFunction(); // "default value"
MyApp.setY("new value");
MyApp.someFunction(); // "new value"
我会这样说:
var MyApp = function() {
var _y = "default value";
return {
someFunction: function(x) {
console.log(_y);
},
setY: function (y) {
_y = y;
}
}
}();
这意味着在为y赋值之前调用MyApp.someFunction是安全的。这还意味着变量的内容在名称空间的范围内维护,例如
console.log(MyApp._y); // undefined
下面是如何使用它:
MyApp.someFunction(); // "default value"
MyApp.setY("new value");
MyApp.someFunction(); // "new value"
有没有什么特别的原因让你把一些函数放在一个外壳里?据我所知,一旦你完成了它,你就不能将新的变量传递给那个外壳,但是你当然可以访问全局变量。但是,如果您不需要机柜,您可以这样做。someFunction=functionx。。。而不是返回块。还有一个猜测是,当你将某个函数存储在MyApp中时,你可能想重新创建该函数。有什么特别的原因让你将某个函数放在一个附件中吗?据我所知,一旦你完成了它,你就不能将新的变量传递给那个外壳,但是你当然可以访问全局变量。但是,如果您不需要机柜,您可以这样做。someFunction=functionx。。。而不是返回块。还有一个猜测是,当你把它存储在MyApp中的时候,你可能想要新的功能。好像我在代码中遗漏了一些小的东西。谢谢你说得对,的确如此。好像我在代码中遗漏了一些小的东西。谢谢@为什么?JavaScript不是Python。使用下划线本身不会阻止变量出现在for…in循环中,或者在运行MyApp.hasOwnProperty时变为true。JavaScript中的私有成员只是构造函数的变量。它们只能通过私有和特权方法访问。我并不反对这种方法,我只是不明白下划线的意义,OP也不要求值是私有的。下划线使私有变量更具可读性。当你在某个地方看到它时,它的范围就会立即被理解。在类/实例方法中很容易区分局部变量。@akellehe为什么?JavaScript不是Python。使用下划线本身不会阻止变量出现在for…in循环中,或者在运行MyApp.hasOwnProperty时变为true。JavaScript中的私有成员只是构造函数的变量。它们只能通过私有和特权方法访问。我并不反对这种方法,我只是不明白下划线的意义,OP也不要求值是私有的。下划线使私有变量更具可读性。当你在某个地方看到它时,它的范围就会立即被理解。在类/实例方法中很容易区分局部变量。