我有一个全局var,稍后会在我的程序中更新,而前一个变量设置为该全局var使用原始引用值。
为了说明,
var testVar = 1;
var hash = {
test : {
testGetVar : {opacity: testVar},
testGetVarFn : function(){ return {opacity: testVar}; }
}
}
testVar = 2;
console.log(hash.test.testGetVar.opacity); // returns 1
console.log(hash.test.testGetVarFn().opacity); //returns 2
有人会澄清这样做的正确方法吗? 假设我在哈希中有10个使用testVar的对象,我是否必须编写fn才能获得更新的值?
编辑: 我已经改变了一些要求,并根据我的原因制定了我的榜样。
这是getter / setter方法,但不起作用。
var testVar = new Field("123");
function Field(val){
this.value = val;
}
Field.prototype = {
get value(){
return this._value;
},
set value(val){
this._value = val;
}
};
var hash = {
test : {
testGetVar : {opacity: testVar.value} ,
testGetVarFn : function(){ return testVar.value; }
}
}
testVar.value = "abc";
console.log(hash.test.testGetVar.opacity); // returns 123
console.log(hash.test.testGetVarFn()); //returns abc
我的假设是,由于在创建哈希时调用了get方法,因此它在那时存储对该值的引用,因此永远不会返回更新的值
答案 0 :(得分:2)
我想你在问如何复制对整数的引用。 Javascript不支持指针,所以我相信它只能在一个闭包中完成,例如你的例子中的函数。但请注意,默认情况下,对象通过引用传递。
在这里传递参数时,有一个很好的描述by-value / by-reference规则:
答案 1 :(得分:1)
var a = "Hello",
b = a;
a = "Goodbye";
console.log(b); // "Hello"
由于您正在调用该函数,因此它将查找最新版本的testVar
。除非在程序中稍后更改,否则属性testGetVar
将被赋予保持不变的值。所以,是的,您必须明确更新hash.test.testGetVar
的值,或者只调用函数testGetVarFn
。
答案 2 :(得分:1)
您可以将testVar转换为对象,因为对象是通过js中的引用传递的,这样您就不需要调用函数来获取最新值:
var testVar = {'value':123};
var hash = {
test : {
testGetVar : testVar,
testGetVarFn : function(){ return testVar; }
}
}
testVar.value='abc';
console.log(hash.test.testGetVar.value); // returns 123 (not anymore: returns "abc" now)
console.log(hash.test.testGetVarFn().value); //returns abc