2

换句话说,让值是一个变量。像这样的东西:

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?
4

4 回答 4

5

使其成为一种方法:

var a = 3,
    b = 4,
    obj = {
        x: function () {
            return a;
        },
        y: b
    };
a = 2;

并称它为:

obj.x()  // returns 2

演示:http: //jsfiddle.net/67NwY/2/

否则,没有本机(旧浏览器支持)方式来获取a使用obj.x. 此处的另一个答案提供了使用Object.definePropertythat 可以做到这一点。

obj.y如果您希望这样做,您也可以将其应用于。

于 2013-05-08T15:26:42.580 回答
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'
于 2013-05-08T15:27:04.583 回答
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'

http://jsfiddle.net/tzfDa/2/

属性 getter 和 setter 除了 Ian 所说的,在新版本的 JS 中,您可以使用属性 getter 和 setter。Ian 使用了定义它们的编程方式,还有一种文字语法(因为您的问题标题提到了“对象文字”)。请注意,通过添加一个 setter,我们允许从obj.xand设置值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
于 2013-05-08T15:34:51.243 回答
1

您可以使用属性描述符(从 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

http://jsfiddle.net/b7prK/

于 2013-05-08T16:00:06.150 回答