2

同じプリミティブ値への 2 つの参照を使用できるようにしたいのですが、一方を介して行われた変更は、「魔法のように」もう一方に反映される必要があります。つまり、例として C コードを使用します。

// (C code):
int value = 0;
int *p1 = &value;
...
int *p2 = &value;
*p2 = 1;
...
printf("%d", *p1); // gives 1, not 0

私がこれまでに見つけた唯一の方法は、追加のオブジェクトの間接化を使用することです。

var a = { valueWrapper: { num: 1, str: 'initial' } };
var b = a;

// change a

a.valueWrapper.num = 2;
a.valueWrapper.str = 'changed';

// show b

console.log(b.valueWrapper.num);
console.log(b.valueWrapper.str);

// outputs:
//
// $ node test.js 
// 2
// changed

よりクリーンな方法はありますか?

4

2 に答える 2

2

Javascript では、整数や文字列などのプリミティブ型は値渡しされます。それを変更する組み込みメソッドはありません。

設計によるものでない場合は、「valueWrapper」を取り除くことができます。

var a = {num :  1, str : "initial"};
var b = a;
a.num = 2;
console.log(b.num); // display 2
于 2013-09-26T08:24:55.317 に答える
0

パラメータと関数引数オブジェクトの場合は 1 つだけです。値がプリミティブ型の場合でも、それらは魔法のように互いに変化します (これは厳密モードでは機能しません)。

    function magicLink(a,b) {
        arguments[0] = 5;
        arguments[1] = 10;
        console.log([a,b]);
    }

    magicLink(1); // [5, undefined]

これは、呼び出し中に設定されたパラメーターに対してのみ機能します。

于 2013-09-26T08:03:59.830 に答える