2017-10-22 18 views
2

私はこのObject.create thingybobの周りに頭を抱えようとしています。私は今、それのための使用を見つけることができません。私はJSのコーディングでかなり早いですが、私はそれのコンセプトを把握するのに苦労しています。私にとっては、コード全体を複雑にするように思えます。私が5歳のように誰かに説明してもらえますか? JavaScript inheritance: Object.create vs newオブジェクトリテラルの代わりにObject.create

What is the 'new' keyword in JavaScript?

Understanding the difference between Object.create() and new SomeFunction()

Using "Object.create" instead of "new"

をしかし、それは私のためにそれをしない:

私はここでこれらの記事を読みました。このコードを持っていれば、Object.createのように見えますが、どのように呼び出すことができますか?

function Player (name, stopAtValue) { 
    this.name = name 
    this.stopAtValue = stopAtValue 
} 

let player = new Player('John', 16) 
+0

提供されたリンクに苦労しているなら、私が示唆していることは、Object.Createについて心配しないことです。また、 'let'というキーワードを使用しているように見えますが、古典的なJS関数コンストラクタをスキップし、新しい' class'デコレータを使う価値があるかもしれません。OOPを少し使いやすくするためです。 – Keith

+0

あなたのサンプルにあるユースケースは、 'Object.create'の恩恵を受けることはありません...あなたはここでどこでもプロトタイプの継承を使用していません。 – Bergi

+0

"*このコードを持っていれば、Object.createのように見えますが、どのように呼び出すことができますか?* - [あなたがリンクした最後の質問](https://stackoverflow.com/q/2709612/1048572 )は文字通り同じ例で、インスタンス上に余分なメソッドがあるだけです。 – Bergi

答えて

0

Object.create()は厳密にJavaScriptの必要な部分ではありません。これは、newを使用することを忘れないようにするために追加され、他のオブジェクトから継承するインスタンスを作成するためのより明示的な方法を提供します。

はのは、あなたのコードを見てみましょう:

function Player (name, stopAtValue) { 
 
    this.name = name 
 
    this.stopAtValue = stopAtValue 
 
} 
 

 
// You have to remember to use "new" here, otherwise this binding won't work: 
 
let player1 = new Player('John', 16); 
 
console.log(player1.name, player1.stopAtValue); 
 

 
// this binding fails when "new" is omitted 
 
let player2 = Player('John', 16); 
 
console.log(player2.name, player2.stopAtValue);

JavaScript開発者は、単に関数はコンストラクタ関数であるとnewが使用されるべきであることパスカルの命名規則から知っていることになっています。

基本的に、あなたのコードとObject.create()は、同じ結果を得ることができます。 Object.create()newの必要性を取り除き、あなたが何をしているかを明示する非常に明白な方法を提供します。

+0

言語から 'Object.create'より' new'をむしろ削除したいと思います。それははるかに重要なプリミティブです。自明に新しい関数を導出できますが、それほど簡単ではありません。 – Bergi

関連する問題