我有一个不完整的克隆Object.prototype
,据我所知,你能告诉我如何完成它!?
编码
function duplicate_object_prototype(){
var aRef=[
'__defineGetter__',
'__defineSetter__',
'__lookupGetter__',
'__lookupSetter__',
'constructor',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'toLocaleString',
'toString',
'valueOf',
'__proto__'
];
var clone = Object.create(null);
for(var i in aRef){
var ref = aRef[i];
var pro = Object.prototype[ref];
clone[ref] = pro;
Object.defineProperty(clone,ref,{
writable:false,
enumerable:false,
configurable:false
});
};
console.log('clone:',clone);
return clone;
}
这个概念
创建克隆,然后:
Object.defineProperty(Object.prototype,'str',{get:function(){
return JSON.stringify(this);
}})
因为,通过继承,Array.prototype
现在有了str
属性,configureArray
的原型链在它应该指向的时候指向克隆Object.prototype
Object.setPrototypeOf(Array.prototype, clone);
逻辑
现在Array
指向克隆,任何实例Object.prototype
都不会继承任何修改!Array