2015-06-18 82 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; 
}