2

その関数のスコープ内から、関数の引数によって参照されるオブジェクトを直接更新したいと考えています。例:

var thisObj = { "val" : "original value" }; 
function modFunc(objRef) {
    objRef = { "val" : "modified" };
    console.log(objRef);  // { "val" : "modified" }
}
console.log(thisObj);  // { "val" : "original value" };

なぜこれが起こるのか理解しています。

    objRef.val = "modified";

modFunc 内で変更を実行します。ただし、私のプロジェクトに固有の理由により、次のようなことを達成できるようにしたいと考えています。

function modFunc(objRef) {
    objRef.self = { "val" : "modified" };  // Of course this will not work, 
    // but is there an Object property or method that allows one to access 
    // the actual memory pointer being referenced by the variable?
}

ここで、modFunc 内でインスタンス化する新しいオブジェクトを参照するように thisObj を直接変更することを指定できます。これは可能ですか?これを行うために使用できる Object.assign() のようなツールがあることは知っていますが、それは普遍的にサポートされていないか、ライブラリをインポートした場合に使用できる bind() のようなライブラリ ツールですが、いくつかあるようです。これを可能にするネイティブ構文が見つかりませんでしたか?..

私はしばらく時間をかけて調べましたが、それ以外の場合は、このような質問をしないようにしています. これに似た投稿が他にもあることも知っていますが、私が求めているものとまったく同じものはなく、投稿などに直接返信できる「評判」がここにはありません。議論を集中させる方法。とにかく、助けてくれてありがとう!

4

3 に答える 3

2

あなたが求めているのは、基本的に、参照渡しメカニズム、または変数への参照を明示的に作成する機能です。JavaScript では、それは不可能です。(お気づきのように)オブジェクトへの参照を渡し、それらを使用してオブジェクトのプロパティ値を変更 (およびプロパティの追加と削除) することはできますが、それはまったく同じことではありません。

于 2012-07-26T18:51:31.473 に答える
1

これは、javascript がサポートしていない真の参照による割り当てです。誤った、誤解されている種類の参照による代入のみをサポートします。

于 2012-07-26T18:51:46.817 に答える
0

参照を扱うことができないので、単純objRefにグローバル変数を作成し、それを引数として渡すことはできません。次に、元のオブジェクトを更新しています。

于 2012-07-26T18:52:14.057 に答える