2016-05-13 64 views
1

下面的代码应该用foo扩展foo,它的任务是在这个代码片段中找到“bug”对于我的生活我似乎无法找到错误。有什么我失踪?当使用其他对象扩展对象时,此代码会破坏的一些主要情况?这个对象扩展器使用hasOwnProperty有一个错误,我不确定那个错误是什么或者这个扩展器在哪里

var foo = {a:1,b:"2",c:[3]}, bar = {d:"3",e:4,f:5.0}; 

var extend = function (obj, extension) { 
    if (typeof obj === "object" && typeof extension === "object") { 
     for (var i in extension) { 
      if (extension.hasOwnProperty(i) && !obj.hasOwnProperty(i)) { 
       obj[i] = extension[i]; 
      } 
     } 
     return obj; 
    } 
} 
var foo_bar = extend(foo,bar); 
console.log(foo_bar); //this logs as expected 
+0

该函数不会返回任何东西,也不会触发任何错误,如果您传递非对象...?! – deceze

+0

@ deceze-it返回* undefined *,这似乎是合理的。 – RobG

回答

0

也许这是当你在这两个对象中有重复的键。扩展对象是否能够覆盖扩展对象的属性?

var foo = {a:1,b:"2",c:[3]}, bar = {c:"3",d:4,e:5.0}; 
var foo_bar = extend(foo,bar); //will result in {a:1,b:"2",c:"3",d:4,e:5.0}; 
+0

这完全取决于该功能应该做什么的定义... – deceze

+0

你是对的@deceze我只是想知道(这就是为什么我说'也许')。只是试图帮助=](我曾尝试过写评论,但我刚开始对SO做出贡献,需要更多的声望来做到这一点......) –

+0

不,因为:'extension.hasOwnProperty(i)&&!obj .hasOwnProperty(i)'如果* obj *已经拥有一个特定的属性,它将不会被替换为* extension *的同名属性。 – RobG