我有一个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
属性,配置Array
的原型链指向克隆时应指向Object.prototype
Object.setPrototypeOf(Array.prototype, clone);
现在Array
指向克隆,任何Object.prototype
实例都不会继承对Array
的修改!
答案 0 :(得分:1)
我不太了解你想要做什么,但你可以像这样克隆Object.prototype
:
var proto = Object.prototype,
clone = Object.create(null),
props = Object.getOwnPropertyNames(proto);
for(var i=0; i<props.length; ++i)
Object.defineProperty(clone, props[i],
Object.getOwnPropertyDescriptor(proto, props[i])
);
Object.freeze(clone);