0

割り当ての特定の順序が機能し、別の順序が機能しない理由について簡単な質問がありました。

あるオブジェクトから別のオブジェクトにプロパティをコピーする単純な「継承」/「コピー」関数(テスト用)を作成したかった:

var cat = { tail:"yes", hairy:"yes, hairy" };
var dog = { sick:"extremely ill"};

function inherit(obj1, obj2) {
    for (var p in obj1) 
    {
    obj2[p] = obj1[p]; // this works, but "obj1[p] = obj2[p];" doesn't. Why??
    }
}

inherit(cat, dog);

console.log(dog.tail);
4

2 に答える 2

1

あなたはプロパティを読んでいるvar p in obj1ので、それらのインデックスは必ずobj1. obj1[p] = obj2[p];そのため、定義されている保証がないため (そして、特定の例では確かにそうです)、割り当てを試みても期待どおりに機能しませんobj[p]。この割り当ては、 に存在しないundefinedのインデックスに割り当て、 にインデックスが存在する値をコピーするだけです。obj1obj2obj2

各オブジェクトのプロパティを個別にループする必要があります (つまり、2 つのループ)。これも良い考えではありません。両方のオブジェクトに同じインデックスを持つ値があると、いずれかが消去されるからです。これによって実際に何を達成しようとしていますか?それは非常に危険で不安定なことのようです。

于 2011-06-29T14:26:26.650 に答える
1

のすべてのプロパティをループしているobj1ため、これらのプロパティはすべて に存在しobj1ます。

そこからコピーobj2しようとすると、(そのオブジェクトに) 存在しないプロパティをコピーしようとしているため、エラーが発生します。

于 2011-06-29T14:25:12.080 に答える