Javascript正确引用值

时间:2011-09-03 19:19:43

标签: javascript variables reference

我有一个全局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方法,因此它在那时存储对该值的引用,因此永远不会返回更新的值

3 个答案:

答案 0 :(得分:2)

我想你在问如何复制对整数的引用。 Javascript不支持指针,所以我相信它只能在一个闭包中完成,例如你的例子中的函数。但请注意,默认情况下,对象通过引用传递。

在这里传递参数时,有一个很好的描述by-value / by-reference规则:

http://docstore.mik.ua/orelly/web/jscript/ch09_03.html

答案 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