如何通过引用设置值对象

问题描述:

我想通过引用对象a来设置值3a.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. 

非常感谢

我怎么能这样做?

你没有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是原始的,因此您没有提及它,而是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}

+0

如果对象来代替原语将有可能?如果没有,那部分似乎有点误导/严重措辞。 – delnan

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

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

Demo

一个例子

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); 

当你有,你想传递一个值的引用的情况下,你总是可以使用拳。事实是,您的商业案例将决定哪种方式最适合您。

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 

或者如果你只是想整型盒装

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