工具库汇总
利用 defineProperty 与 getOwnPropertyDescriptor 完成对属性的深度复制
Object.defineProperty(Object.prototype,
"extend",{
writable:true,
enumerable:false,
configurable:true,
value:function(o){
//获取自有属性 和 可枚举属性
var names = Object.getOwnPropertyNames(o),len;
for(var i = 0;len = names.length,i<len;i++){
//属性存在则跳过
if(names[i] in this) continue;
//获取其属性对应的描述对象
var oDesc = Object.getOwnPropertyDescriptor(o,names[i]);
Object.defineProperty(this,names[i],oDesc);
}
}
});
实例:
var now = Object.defineProperties({},{
"custom":{
writable:false,
configurable:false,
enumerable:true,
value:"被修改了 这么神奇"
},
"custom2":{
writable:false,
configurable:false,
enumerable:true,
value:"被修改了 这么神奇"
}
});
console.log(now); //{ custom: '被修改了 这么神奇', custom2: '被修改了 这么神奇' }
// extend 继承
Object.defineProperty(Object.prototype,
"extend",{
writable:true,
enumerable:false,
configurable:true,
value:function(o){
//获取自有属性 和 可枚举属性
var names = Object.getOwnPropertyNames(o),len;
for(var i = 0;len = names.length,i<len;i++){
//属性存在则跳过
if(names[i] in this) continue;
//获取其属性对应的描述对象
var oDesc = Object.getOwnPropertyDescriptor(o,names[i]);
Object.defineProperty(this,names[i],oDesc);
}
}
});
var a = {};
a.extend(now);
console.log(a);
// { custom: '被修改了 这么神奇', custom2: '被修改了 这么神奇' }

浙公网安备 33010602011771号