1

b.first[0] が「t」を返す理由と、これを回避するにはどうすればよいですか?

b.first[0] に安全な "q" が必要です

var extend = function(o,p){
    for(prop in p){
        o[prop] = p[prop];
    }
    return o;
};

var a = {first:['q','w']};
var b = {};

extend(b,a);

document.write(a.first[0]); //q
document.write(b.first[0]); //q

a.first[0] = 't';

document.write(a.first[0]); // t
document.write(b.first[0]); // t ?????????????????????
4

1 に答える 1

5

これは、b を a で拡張しても a からデータが再作成されないという概念に関連する問題です。一部のデータがオブジェクト (配列など) である場合、新しい同一の配列を作成する代わりに、その配列を単に「ポイント」します。基本的に、同じ配列への 2 つのポインターを格納しているため、一方を変更すると、もう一方も変更されます。

これは、Javascriptでオブジェクトを「複製」するという考えをより詳細に説明する回答です。

https://stackoverflow.com/a/728694/1570248

于 2013-04-05T05:53:54.537 に答える