0

一部のプロジェクトは使用Object.create()またはObject.defineProperties()機能します。お勧めですか?の違いは何ですか

x = Object.create(null); 

vs

x = {}

x = {}
x.__proto__.hello = function() { 
    console.log("hello"); 
}

vs

x = Object.create(null);
Object.defineProperty(x, "hello", { 
    value: function() { 
        console.log("hello"); 
    } 
});

defineProperty/create私には非常に冗長で長いようです。いつ/なぜそれらを使用するのですか?おそらく、ゲッター/セッター/オーバーライドプロパティを強制するのが良いかもしれませんか?

4

1 に答える 1

0

大きな違いがあります。ドキュメントを見てください!

  • Object.createあなたの場合、最初の引数から継承するオブジェクトを作成nullします。対照的に、{}-or-new Object()は、から継承する新しいオブジェクトを作成しますObject.prototype
  • __proto__は非標準であり、使用すべきではありません。ただし、あなたの場合はObject.prototype.hello = function() {…};. そのオブジェクトを列挙可能なプロパティで拡張しないでください。
  • Object.defineProperty特別な記述子オブジェクトを使用して、オブジェクトのプロパティを定義します。、および属性のデフォルトは ですenumerable。つまり、たとえば、または他の値を割り当てることはできません。configurablewritablefalsedelete x.hello

最初のスニペットはhelloからメソッドを継承するプレーン オブジェクトを作成Object.prototypeしますが、2 番目のスニペットは何も継承せず、編集不可能なhelloプロパティを持つオブジェクトを作成します。関連性はあまり感じません。

于 2012-12-05T08:45:47.650 に答える