如果要拷贝一个对象,确保要做到以下两件事:
I.确保拷贝后的对象,与原对象具有相同的prototype原型对象;
II.确保拷贝后的对象,与原对象具有相同的属性。
function copyObject(orig){
//具有相同的原型
var copy = Object.create(Object.getPrototypeOf(orig));
//具有相同的属性
copyOwnPropertyFrom(copy,orig);
return copy;
}
//属性copy
function copyOwnPropertiesFrom(target,source){
Object
.getOwnPropertyNames(source)
.forEach(function(propKey){
var desc = Object.getOwnPropertyDescriptor(source,propKey)
Object.defineProperty(target,propKey,desc);
});
}
1.获取所有source自身属性的数组,
2.遍历这些键,
3.获取属性描述符,
4.使用属性描述符创建target的自身属性。