2017-11-27 6 views
1

どのようにjsを知っていますか? :D jsでの参照の仕組みは?

let obj = {} 
    let anotherObj = obj 

anotherObjobjの基準として{}値を含みます。 だからanotherObjにはobjの参照のみがあります。しかし、新しい値をobjに再割り当てするとき なぜjsで代入するのがこのように動作するのですか? そして私は、この機能は便利monkeypatchingの技術はまだ

anotherObj // {} 
    obj = null 
    anotherObj // {} 

変数anotherObj{}値が含まれているを提供知っています。 しかしanotherObjobjの参照であり、私はあなたが道その「参照」の仕事を誤解しているnull

+0

その質問に対する回答を見てください。 – jhpratt

答えて

1

objとして、それが含まれている必要があります理解して。あなたが見るときあなたはobj参照オブジェクトとオブジェクトを参照anotherObj参照をobj考えている...

var obj = {}; 
var anotherObj = obj; 

... C.に似pointersの観点で考えています。あなたは、一連の参照の点で考えています。しかし、あなたがpointersまたは他のアドレス空間参照を使用している場合を除き、それはほとんどの言語で割り当てがどのように機能するかではありません。

代わりに、var obj = {};があるメモリ位置にオブジェクトを作成し、objにそのメモリ位置が含まれるようになりました。 var anotherObj = obj;を実行すると、objがそのメモリ位置として評価され、そのメモリ位置がanotherObjの値として割り当てられます。だからanotherObjではなく、objを指しているので、objanotherObjの両方がobjの同じメモリ位置を指しています。

obj = nullを実行すると、objが指し示す値がanotherObjに変更されますが、まだ作成したオブジェクトのメモリ位置を指しています。

私の知る限り、オブジェクト参照をすべて更新することも、オブジェクトを手動で削除することもできません(例えば、それをnullと置き換えるなど)。あなたの目的がオブジェクトのライフサイクルを管理する目的でそのようなことをすることであるなら、あなたは失望するでしょう。その代わりに、オブジェクトをグローバル変数に格納し、いくつかのローカル参照とは対照的にそのグローバル参照を使用するなどの代替アプローチを取る必要があります。

+0

ありがとう、私はそれを得た –