2017-04-18 8 views
0

JavaScriptを学習していて、主な違いを理解しようとしています。 Object.create(someName)でオブジェクトを作成することはできますが、 Object.create(someName.prototype)で作成できますが、キーの違いをよく理解していません。 プロパティを通常のプロパティとして設定する必要がありますか? のようにsomeName.aまたはsomeName.prototype.a? ちょっとわかりにくいです。 Object.Create私のオブジェクトプロトタイプチェーンをオブジェクトimと指定して定義していますが、someNameまたはsomeName.prototypeのいずれかを指定することができますが、違いとベストプラクティスを完全に理解しているようです。 ありがとうございました。 :)Object.create(name)vs Object.create(name.prototype)

+0

'someName' 1つのオブジェクトを指し、' someName.prototype'は、別のオブジェクトを参照するので、あなたが使用すべき1 'Object.create()'はあなたが達成しようとしているものに本当に依存します。同様に、 'someName.a'または' someName.prototype.a'の間の選択は、あなたが達成しようとしているものによって異なります。もしプロトタイプにプロパティを追加すると、そのプロトタイプを持つ* all *オブジェクトはそれにアクセスできます。時には役立ち、他には役に立たない。 – nnnnnn

+0

ありがとうございます! –

答えて

0

Object.createは、プロトタイプが関数全体の最初の引数として渡されたものである新しいオブジェクトを作成します。 JavaScriptで

prototypeプロパティは特別な力との定期的なオブジェクトですが、私はすでに述べてきたように、それはまだ通常のオブジェクトです。

したがって、の質問はxまたはx.prototypeの場合、要件に応じて異なります。例えば

var obj = { name: "Matías" }; 

// This will create a new object whose prototype 
// is the object contained in the "obj" variable 
var obj2 = Object.create(obj); 

実際には、オブジェクトは、prototype財産を所有していません。あなたには、いくつかのコンストラクタ関数のプロトタイプからオブジェクトを作成したいときは、他のアプローチを使用します。

var A = function() {}; 
A.prototype.doStuff =() => { 
    // do stuff here 
}; 

// A common mistake is to provide A instead of A.prototype. 
// In JavaScript, even functions are objects, hence if you provide 
// A instead of A.prototype, the prototype of the newly created object 
// will be the function A and its members, not the ones that would be available 
// creating an object like this: new A() 
var B = Object.create(A.prototype); 
B.doStuff(); 

var C = Object.create(A); 
// Function "doStuff" is undefined!! 
C.doStuff(); 
+0

ありがとうございました。 –

関連する問題