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

您正在遍历 的所有属性obj1,因此所有这些属性都存在于obj1.

如果您尝试从中复制,obj2则您正在尝试复制不存在的属性(在该对象上),因此会导致错误。

于 2011-06-29T14:25:12.080 回答
1

您正在阅读 properties var p in obj1,因此这些索引只必须存在于obj1. 因此,尝试分配obj1[p] = obj2[p];不会按预期工作,因为没有obj[p]定义的保证(在您的特定示例中肯定是这种情况)。此分配将简单地分配undefined给 inobj1中不存在的索引,obj2并复制其索引确实存在于 中的值obj2

您需要分别循环遍历每个对象的属性(即两个循环),尽管这也不是一个好主意,因为两个对象上具有相同索引的任何值都会导致其中一个被清除。你实际上想通过这个实现什么?这似乎是一件非常危险/不稳定的事情。

于 2011-06-29T14:26:26.650 回答