如何通过引用设置值对象

时间:2013-04-16 17:27:58

标签: javascript object

我希望通过引用对象a将值3设置为a.b

示例:

var a ={};
a.a =1;
a.b =2;
var x = a.b;
alert (a.b);// show 2
x =3;
alert (a.b); // I want to see in this line 3 instead 2.

非常感谢

我怎么能这样做?

5 个答案:

答案 0 :(得分:2)

你做不到。由于2是基元,因此您没有对它的引用,而x实际上具有值3

您可以做的是提供一个修改父对象属性的函数:

var a = {
   a: 1,
   b: 2,
   setB: function(value) {
      this.b = value;
   }
}

a.setB(3);
console.log(a.b);

我认为这更清洁。

回答你的编辑,是的,有点儿。这取决于你在做什么。如果您有以下内容:

var a = {
   a: {value: 1},
   b: {value: 2},
};

var x = a.b;
x = {value: 3};

然后a.b仍然是{value: 2},因为您所做的只是x指向另一个对象。但要意识到x指向a.b,这是一个对象,相反,如果你x.value = 3;a.b现在有{value: 3}

答案 1 :(得分:1)

你没有JavaScript中的指针,所以你不能简单地这样做。

你通常在JavaScript中“替换”指针的做法是使用回调:

var a ={};
a.a =1;
a.b =2;
var x = a.b;
alert (a.b);// show 2
var f = function(v){ a.b=v};
f(3);
alert (a.b); // alerts 3

这个回调可以传递给其他函数,可能与你想要的语言最接近。

答案 2 :(得分:1)

您只能通过引用传递对象。

var a = {};
a.a = 1;
a.b = 2;
var x = a;
alert (a.b); // 2
x.b = 3;
alert (a.b); // 3

Demo

答案 3 :(得分:0)

又一个例子

 var a ={};
    a.a =1;
    a.b =2;
    var x =function(v){ a.b=v};
    alert (a.b);// show 2
    x(3);
    alert (a.b); 

答案 4 :(得分:0)

如果您想要传递对值的引用,则可以始终使用装箱。现实情况是,您的业务案例将决定哪种方式最适合您。

What is boxing and unboxing and what are the trade offs?

这是一个未经测试的伪代码,但它应该适合你。

您有几个选项,将整个对象视为参考,或者只是对单个原始值进行装箱。

var c={}
c.a = null
c.b = null

//set the value of "c"
c = a;

//change the value of the reference
a.b = 100;

//now the reference has been update
alert( c.b );  // equals 100

如果您只想要int框

var boxed_value = {}
boxed_value.total = 100;

var obj_a = {};
obj_a.value_a = boxed_value;

//obj_a.value_a.total = 100;


var obj_b = {};
obj_b.value = boxed_value;

//obj_b.value_a.total = 100
//obj_a.value_a.total = 100

boxed_value.total = 200;
obj_a.value.total = 300;
obj_b.value.total = 400;

//now all values have changed as they are referenced