3

プロトタイプと疑似古典のインスタンス化に関する他の記事をいくつか読みましたが、まだいくつか質問があります。説明のために以下のコードを含めました。

質問は次のとおりです。

  1. Person は実質的に Human と同じですか?
  2. ジョンとアリスは本質的に同じですか?
  3. ある方法と別の方法では、どのような副作用が生じる可能性がありますか?
  4. 注意すべき重要なパフォーマンスの問題はありますか?

    var Person = function() {
     hopes: function(){},
     dreams: function(){}
    };
    
    var John = Object.create(Person); // not supported in older browsers
    

    --

    var Human = function() {
    };
    
    Human.prototype.hopes = function(){}; // could add both hopes & dreams with an object
    Human.prototype.dreams = function(){};
    
    var Alice = new Human();
    
4

1 に答える 1

1

最初の例では構文が少しずれていますが、そうです、これらは同様のオブジェクトになります。最初の例では、次のようになります。

var Person = {
 hopes: function(){},
 dreams: function(){}
};

ただし、いくつかの微妙な違いがあります。キーワードを使用するnewと、オブジェクトがプロトタイプ チェーンに追加されます。たとえば、 のプロトタイプ チェーンAliceが使用されHumanます。Object.createオブジェクトのプロトタイプをパラメータに設定します。たとえばPersonisJohnのプロトタイプです。Object.create(null)これらは、 new Object(); を実行したかのように基本的なオブジェクト プロトタイプを取得しない場合を除いて、通常は似ています。

ここでパフォーマンス テストを実行できますhttp://jsperf.com/obj-create-vs-new/4

于 2013-09-26T03:48:18.240 に答える