3

下面的工作twin(source)函数生成一个新对象,该对象具有与相同属性source和相同的父对象(原型链)。(例如twin(isFinite)[object Object]and 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方法。

4

1 回答 1

0

你可以尝试这样的事情:

obj= eval(uneval(objSource));

它仅适用于 FF,但其想法是序列化一个对象,然后 eval 序列化的字符串实例化(原型化)一个具有与第一个对象相同属性的新对象。

您还可以将函数 JSON.stringify 用作“uneval”函数。

于 2013-05-29T03:46:31.080 回答