1

私は持っている

var a = {
    f1: function() {
        // Do Something
    },
    f2: ['a','b','c'],
    f3: 1234
}

私はこのようなものを作成する必要があります

var b = Object.create(a);

しかし、 b は、 a ! のプロパティのいずれかが含まれていることを示していません。

4

3 に答える 3

2

次のようにして、クローン関数を作成できます。

var clone = function(obj) {

    // Create a new object using the same prototype as the original object
    var cloned = Object.create(obj);      

    // Copy each property from 'obj' to 'cloned'
    for (p in obj) {      
        if (obj.hasOwnProperty(p)) {
            cloned[p] = obj[p];
        }
    }

    return cloned;        // Return the cloned object
}

編集:元のオブジェクトから複製されたオブジェクトを作成する最初のステートメントに注意してください。

  1. 以前のように書いた場合var cloned = {};、プロトタイプが異なることに注意する必要があります。そのため、このソリューションは 100% では適切に機能しません。instanceof演算子を使用すると、 が返されるためfalseです。

  2. 他の回答が説明しているように使用するvar cloned = Object.create(obj);と、元のプロトタイプと同様のプロトタイプを持つ複製されたオブジェクトが取得されます。ただし、元のオブジェクトからプロパティをコピーして、クローン バージョンにアタッチする必要もあります。これが、for ループを使用する必要がある理由です。

最後に、以前の Object.create を使用した 2 番目のアプローチが、古い JavaScript エンジンを使用しているためにブラウザーで機能しない場合は、次のような小さな回避策を使用する必要があります。

function F() {};
F.prototype = obj.prototype;
var cloned = new F();

それが役に立てば幸い!:)

于 2013-02-21T12:11:59.270 に答える
0

JQuery を使用してこれを行う別の方法は、関数Jquery.extendです。次のように使用できます。

var b = jQuery.extend({},a);
于 2013-02-21T11:53:18.410 に答える
0

使用prototype:

var b = Object.create(a.prototype);

Object.create指定されたプロトタイプ オブジェクトとプロパティで新しいオブジェクトを作成します。

新しく作成されたオブジェクトのプロトタイプが必要です。Object.create(proto [, propertiesObject ])

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/create

于 2013-02-21T11:48:29.477 に答える