我如何创建一个 Object.prototype 克隆
how do i create an Object.prototype clone
据我所知,我有一个 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
实例继承!
我不太明白你想做什么,但你可以像这样克隆 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);
据我所知,我有一个 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
实例继承!
我不太明白你想做什么,但你可以像这样克隆 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);