换句话说,让值为变量。 像这样:
var a=3,b=4;
var obj = {x : a, y : b};
alert(obj.x); //will display '3'
a=2;
alert(obj.x); //want it to display '2' - how can i accomplish this?
答案 0 :(得分:5)
制作方法:
var a = 3,
b = 4,
obj = {
x: function () {
return a;
},
y: b
};
a = 2;
并称之为:
obj.x() // returns 2
DEMO: http://jsfiddle.net/67NwY/2/
否则,使用a
无法使用原生(并在旧版浏览器中受支持)获取obj.x
的“实时”值。这里的另一个答案提供了使用Object.defineProperty
可以做到这一点。
如果您希望这样做,也可以将其应用于obj.y
。
答案 1 :(得分:5)
这是一种方法:
var a=3,b=4;
var obj = {x : function(){return a;}, y : function(){return b;}};
alert(obj.x()); // displays '3'
a=2;
alert(obj.x()); // displays '2'
答案 2 :(得分:3)
将其设为对象
var a = {
val:3
};
var obj = {x : a};
alert(obj.x.val); //will display '3'
a.val=2;
alert(obj.x.val); //will display '2'
财产获取者和制定者
除了Ian所说的,在较新版本的JS中,您可以使用属性getter和setter。 Ian使用了编程方式来定义它们,还有一个文字语法(因为你的问题标题提到了“对象文字”)。请注意,通过添加设置器,我们允许设置obj.x
和a
的值;
var a = 3;
var o = {
get x() {
return a;
},
set x(value) {
a = value;
}
};
alert ( o.x ); // 3
a = 2;
alert( o.x ); // 2
o.x = 4;
alert(a); // 4
答案 3 :(得分:1)
您可以使用property descriptors(从ECMAScript第5版开始)执行此操作。
var a = 3;
var obj = {};
Object.defineProperty(obj, "x", { get : function(){ return a; } });
alert(obj.x); // 3
a = 2;
alert(obj.x); // 2