Javascript如何为';范围';名称空间对象的定义
我有一个名称空间的对象Javascript如何为';范围';名称空间对象的定义,javascript,Javascript,我有一个名称空间的对象 ONE.TWO.THREE = { my_var:'', myfunction : function () { my_var = 1; //does not work >> undefined ONE.TWO.THREE.my_var = 1 ; // works fine but it is a lot of code } ...... } “This”不起作用
ONE.TWO.THREE = {
my_var:'',
myfunction : function () {
my_var = 1; //does not work >> undefined
ONE.TWO.THREE.my_var = 1 ; // works fine but it is a lot of code
}
...... }
“This”不起作用(窗口…),因此我必须创建或使用“scope”或“self”变量。但在这种情况下,我不能(或者我不知道如何)
现在,我必须使用1.2.3.my_var….是否可以创建某种别名
有什么把戏吗?我必须换成模块模式吗?谢谢。您有以下选择:
ONE.TWO.THREE = {
my_var : 0,
fn : function(){ this.my_var = 10; }
};
ONE.TWO.THREE.fn(); // Will se ONE.TWO.THREE.my_var to 10
// because the this will referr to the object
或将临时变量参照到对象
var XX = {
YY : {
my : 0,
fn : function(){
var tmp = XX.YY; // Save the var to a temp var.
tmp.my = 10;
}
}
}
XX.YY.fn() // Set to 10
XX.YY.my // Will be 10
我必须换成模块模式吗
您不必这样做,但如果您不想使用此
(问题下方的注释建议您不要),这可能是最清楚、最简单的方法:
ONE.TWO.THREE = function() {
var three = {
my_var: '',
myfunction: function() {
three.my_var = 1;
}
};
return three;
}();
并使用
this.myVar=1代码>?@Niels'This'不起作用(=窗口)。我正在从setTimeot funcs和eventlistener addings调用1.2.3.myfunction。也许这就是问题所在?现在我想我将使用一个临时别名……当您将函数发送到setTimeout
时,您可以使用bind
(setTimeout(ONE.TWO.THREE.myfunction.bind(ONE.TWO.THREE),1000);
)或将您的函数包装在匿名函数中(setTimeout(function(){ONE.TWO.THREE.myfunction();},1000);
)。这两种解决方案都将确保保留正确的上下文,以便您可以安全地使用this.my_var=1代码>。谢谢大家。解决方案也不清楚,是否有用。。。。现在我将保留完整的名称空间样式……@civiltomain:使用this
是否有问题?tmp
变量的意义是什么XX.YY.my=10
也会做同样的事情。在本例中,还没有。但是如果你想重复使用这个变量10次,你只需要定义这个临时值一次。而不是一直写完整的结构。是的。。。有时很难找到要使用的模式/样式。。。。对象文字、原型、模块。。。。谢谢way@civiltomain心理学研究表明,你考虑的选择越多,你选择的可能性就越小。奇怪,但却是真的。。。