1

ここで明らかな何かが欠けていると確信していますが、changeMe メソッドへの引数が「参照によって」渡されることを期待しています。つまり、関数内のパラメーターを変更すると、関数外の変数が変更されます。 .

以下は、コンソール出力を表示するために Chrome の F12 開発者ツールを使用して、jsfiddle で実行されました。http://jsfiddle.net/fzEpa/

var object1 = { Property1: 'Value1' };
changeMe(object1);
console.log(object1);

function changeMe(refToObject) {
    console.log(refToObject);
    refToObject = { Property1: 'Value2' };
    console.log(refToObject);
}
4

4 に答える 4

11

これは参照によって渡されますが、object1変数への参照ではなく、オブジェクトへの参照です (オブジェクトへの参照でもあります)。

オブジェクトへの参照を新しいオブジェクトへの参照で上書きしています。

これにより、元のオブジェクトへの元の参照がそのまま残ります。

オブジェクトを変更するには、次のようにします。

function changeMe(refToObject) {
    refToObject.Property1 = 'Value2';
}
于 2013-04-17T12:56:10.123 に答える
3

オブジェクトへの参照が引数値として渡されます。でも:

refToObject = { Property1: 'Value2' };

この時点でrefToObject、別のオブジェクトを参照するためにこの変数を割り当てているため、以前に参照されていたオブジェクトへの参照が失われます。

以前のオブジェクト参照を破棄する代わりに のプロパティを編集する場合refToObject、コードは期待どおりに機能します (最初に @Quentin の回答で説明されているように)。

于 2013-04-17T12:56:45.350 に答える
0

C++ に精通している場合、これは次のようなことを行うのと同じです。

void f(int* ref) {
    ref = new int(3);
}
int* a = new int(5);
f(a);
printf("%d",a); //Prints 5
于 2013-04-17T13:01:01.543 に答える
0

プロパティ 1 を再定義しようとしているため、機能しません。参照渡し ypu を使用するには、 ChangeMe()関数refToObject.Property1='Value2'内 でこのようにする必要があります。Javascript での参照による変数の受け渡しについて理解を深めるために、これを参照してください。

于 2013-04-17T13:03:45.407 に答える