2011-06-29 8 views
0

割り当ての順序がうまくいかない理由ともう何が割り当てられないのかについて簡単に質問しました。オブジェクト内のプロパティのJS割り当て順序

私は別のオブジェクトからプロパティをコピーしていること(それをテストするための)シンプルな「継承」/「コピー」機能を作成したい:

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); 

答えて

1

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

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

+0

ありがとうございました:) – devdev

1

プロパティvar p in obj1を読んでいるので、これらのインデックスは必ずobj1にのみ存在します。そのため、obj1[p] = obj2[p];を割り当てようとすると、obj[p]が定義されているという保証はありません。この割り当てでは、undefinedobj1のインデックスにはobj2に存在しないものに割り当て、インデックスのある値はobj2にコピーします。

それぞれのオブジェクトのプロパティを別々にループする必要があります(つまり2つのループ)が、両方のオブジェクトで同じインデックスを持つ値はすべて消去されるため、これもお勧めできません。これで実際に何を達成しようとしていますか?それは非常に危険な/揮発性のようです。

+0

+1 OPは、両方のオブジェクトが少なくとも「obj2 [p] = obj2 [p] || obj1 [p]; '(あるいは偽の値を代入している場合は、いくつかのバリエーション)。ループや割り当てについて学ぶだけのプログラミング演習であれば、それは公正な質問です。 – brymck

+0

@ブライアン、私は質問が有効なものではないことを意味したわけではなく、コードの意図/目的が不明確であり、明確に定義されていないということだけです。あなたは鍵を紛失して多くのことをすることができましたが、私の問題はそのような場合のOPの意図が不明であったことでした。 – davin

関連する問題