2013-04-16 32 views
2

我想通過引用對象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. 

非常感謝

我怎麼能這樣做?

回答

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

你不能那樣做。由於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

1

您只能通過引用傳遞對象。

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

Demo

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

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

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