オブジェクト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.
どうもありがとう
どうすればそれができますか?
オブジェクト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.
どうもありがとう
どうすればそれができますか?
そんなことはできません。はプリミティブであるため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
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
このコールバックは他の関数に渡すことができ、おそらくこの言語で必要なものに最も近いものです。
値への参照を渡したい場合は、いつでもボクシングを使用できます。現実には、ビジネス ケースによって何が最適かが決まります。
ボックス化とボックス化解除とは何ですか?トレードオフは何ですか?
これは少しテストされていない疑似コードですが、うまくいくはずです。
オブジェクト全体を参照として考慮するか、単一のプリミティブ値でボックス化するか、いくつかのオプションがあります。
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