如何通过引用设置值对象
问题描述:
我想通过引用对象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.
非常感谢
我怎么能这样做?
答
你没有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}
。
答
您只能通过引用传递对象。
var a = {};
a.a = 1;
a.b = 2;
var x = a;
alert (a.b); // 2
x.b = 3;
alert (a.b); // 3
答
一个例子
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
如果对象来代替原语将有可能?如果没有,那部分似乎有点误导/严重措辞。 – delnan