2016-05-13 1 views
1

次のコードはfooをbarで拡張することになっています。このスニペットでは "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 - これは* 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

あなたは正しいですか?私はちょうど(私は 'たぶん'と言った理由です)疑問に思っていた。ちょうど助けようとしています=](私はちょうどコメントを書こうとしましたが、私はちょうどそれに貢献し始めました、そうするためにもっと評判が必要です...) –

+0

いいえ、 'extension.hasOwnProperty(i)&&!obj .hasOwnProperty(i) 'もし* obj *がすでに特定の独自のプロパティを持っていれば、* extension *と同じ名前のプロパティに置き換えられません。 – RobG

関連する問題