Javascript - 这些功能是否做同样的事情?

时间:2013-12-07 19:50:23

标签: javascript object

两种功能的输出是否有可能不同?

 var o1 = {x1:1,y1:2,z1:3};
 var o2 = {x2:4,y2:5,z2:6};

 function extend(o1,o2)
 {
   for(p in o2)
   {
      o1[p] = o2[p];   
   }    

   return o1;
 }

 function union(o1,o2)
 {
    return extend(extend({}, o1), o2);   
 }    

1 个答案:

答案 0 :(得分:4)

返回值始终不同,但返回的对象的内容始终相同。

函数extend()修改第一个对象,union()返回一个新对象。换句话说:

var o1 = {x1:1,y1:2,z1:3};
var o2 = {x2:4,y2:5,z2:6};

union( o1, o2 );  // both o1 and o2 are unchanged, function returns a new object
extend( o1, o2 ); // returns o1 which has now been changed

实际上因为union函数扩展了一个对象,而extend函数只复制属性,返回值可以不同:

var o1 = [ 1, 2 ];
var o2 = [ 3, 4 ];

union( o1, o2 );  // returns an object
extend( o1, o2 ); // returns an array

虽然在这种情况下,键和它们的值也是相同的。