js拷贝对象

来源:互联网 发布:大数据hadoop 编辑:程序博客网 时间:2024/05/21 07:09

完整代码:

function copyObject(orig) {
    var copy=Object.create(Object.getPrototypeOf(orig));
    copyOwnPropertiesFrom(copy,orig);
    return copy;

}

function copyOwnPropertiesFrom(target,source){
       Object.getOwnPropertyNames(source).forEach(function(propKey){
       var desc=Object.getOwnPropertyDescriptor(source,propKey);
      Object.defineProperty(target,propKey,desc);
   });
       return target;
};



详解:


为了创建一个对象的完整拷贝,你需要确保两件事;

1、拷贝必须有原来对象相同的原型

2、拷贝必须具有原来对象相同的属性和特性

下面的函数实现了这两步骤


function copyObject(orig) {

       //实现第一步

var copy=Object.create(Object.getPrototypeOf(orig));

       //实现第二步
copyOwnPropertiesFrom(copy,orig);

return copy;

}

下面的函数实现了剩余的小部分细节

1、获得source所有自有属性键的数组

2、遍历这些键

3、获取属性描述符

4、使用属性描述符常见target的自有属性

function copyOwnPropertiesFrom(target,source){

Object.getOwnPropertyNames(source) //实现第一步

                .forEach(function(propKey){ //实现第二步
var desc=Object.getOwnPropertyDescriptor(source,propKey); //实现第三步
Object.defineProperty(target,propKey,desc); //实现第四步
});
return target;
};


1 0