有没有办法在JavaScript中创建动态对象文字值?

时间:2013-05-08 15:23:16

标签: javascript javascript-objects object-literal

换句话说,让值为变量。 像这样:

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

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

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

财产获取者和制定者 除了Ian所说的,在较新版本的JS中,您可以使用属性getter和setter。 Ian使用了编程方式来定义它们,还有一个文字语法(因为你的问题标题提到了“对象文字”)。请注意,通过添加设置器,我们允许设置obj.xa的值;

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

http://jsfiddle.net/b7prK/