3

以下の作業関数は、同じ親 (プロトタイプチェーン) と同じ独自のプロパティをtwin(source)持つ新しいオブジェクトを生成します。(例: and ) 同じ効果をもたらすネイティブ関数はありますか?sourcetwin(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メソッドは Blood で利用可能です

4

1 に答える 1

0

次のようなことを試すことができます:

obj= eval(uneval(objSource));

FFでのみ機能しますが、アイデアは、オブジェクトをシリアル化し、シリアル化された文字列を評価して、最初のオブジェクトと同じプロパティを持つ新しいオブジェクトをインスタンス化(プロトタイプ化)することです。

関数 JSON.stringify を「uneval」関数として使用することもできます。

于 2013-05-29T03:46:31.080 に答える