2015-06-18 34 views
0

我试图克隆一个对象,使用lodash'_.clone克隆对象的原型继承 - IE10

但是,我想保持克隆对象的原型继承完整。 IE 10不让我访问__proto__甚至这个Object.setPrototypeOf(toObj, Object.getPrototypeOf(fromObj));,我不想通过callapply访问父对象,因为父对象上有很多setter和getter方法需要从clone对象中调用。

有什么建议吗?

+0

你会要开始'的Object.create(Object.getPrototypeOf(fromObj))'你的克隆过程。我不认为lodash确实允许扩展它们的功能,所以你必须编写自己的功能。 – Bergi

回答

0

经过一番尝试,我发现这是我使用的:

/** 
* Shallow clone an object and retains the prototype chain 
* @param {Object} fromObj Object to be cloned 
* @returns {Object} Cloned Object 
*/ 
function cloneObj(fromObj) { 
    var toObj, i; 

    if (fromObj && typeof fromObj === 'object') { 
    toObj = new fromObj.constructor(); 

    for (i in fromObj) { 
     if (fromObj.hasOwnProperty(i)) { 
     toObj[i] = fromObj[i]; 
     } 
    } 
    } else { 
    throw new Error(fromObj + ' cannot be cloned'); 
    } 

    return toObj; 
}