我如何创建一个Object.prototype克隆

时间:2015-03-15 22:51:10

标签: javascript object prototype prototype-chain prototype-oriented

我有一个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的修改!

1 个答案:

答案 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);