2016-05-13 63 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