簡體   English   中英

創建雙對象又稱繼承克隆

[英]Create twin object a.k.a. inheritance clone

下面的工作twin(source)函數生成一個新對象,它具有與source相同屬性和相同的父對象(原型鏈)。 (例如twin(isFinite)將是[object Object]instanceof Function )任何本機函數是否提供相同的效果?

/**
 * @param {Object|Function} source
 * @param {(Object|Function|null)=} parent defaults to source's parents
 * @return {Object}
 */
function twin(source, parent) {
    var twin, owned, i = arguments.length;
    source = i ? source : this; // use self if called w/o args
    parent = 2 == i ? parent : Object.getPrototypeOf(source);
    twin = Object.create(parent);
    owned = Object.getOwnPropertyNames(source);
    for (i = owned.length; i--;) {
        twin[owned[i]] = source[owned[i]];
    }
    return twin;
}

更新: 血液中.twin方法。

你可以嘗試這樣的事情:

obj= eval(uneval(objSource));

它僅適用於FF,但其目的是序列化一個對象和eval,序列化的字符串實例化(原型化)一個具有與第一個相同屬性的新對象。

您還可以使用函數JSON.stringify作為“uneval”函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM