2017-04-18 1 views
0

Ich lerne Javascript und ich versuche, die wichtigsten Unterschiede zu verstehen. Ich kann Objekt mit Object.create(someName) erstellen und ich kann mit Object.create(someName.prototype) erstellen, aber ich verstehe nicht ganz die wichtigsten Unterschiede. Sollte ich Eigenschaften als normale Eigenschaften setzen? wie someName.a oder someName.prototype.a? Es ist nur ein bisschen verwirrend für mich. Ich verstehe, dass bei der Verwendung von Object.Create ich meine Objektprototypen-Kette mit dem Objekt im specifing definieren, aber ich kann entweder someName oder someName.prototype angeben, aber ich kann nicht scheinen, die Unterschiede und Best Practice zu verstehen. Vielen Dank für Ihre Hilfe. :)Object.Create mit Object.create (Name) vs Object.create (name.prototype)

+0

'someName' auf ein Objekt bezieht, und' someName.prototype' bezieht sich auf ein anderes Objekt, so das man Sie verwenden sollten mit 'Object.create()' hängt wirklich davon ab, was Sie erreichen wollen. In ähnlicher Weise hängt die Auswahl zwischen 'someName.a' oder' someName.prototype.a' davon ab, was Sie erreichen möchten - wenn Sie dem Prototyp eine Eigenschaft hinzufügen, haben * * alle * Objekte mit diesem Prototyp Zugriff darauf hilfreich manchmal und nicht hilfreich andere Zeiten. – nnnnnn

+0

Vielen Dank! –

Antwort

0

Object.create erstellt ein neues Objekt, dessen Prototyp das erste Argument der gesamten Funktion ist.

In JavaScript die prototype Eigenschaft ist ein regelmäßiges Objekt mit besonderen Kräften, aber wie ich schon sagte, es ist immer noch ein regelmäßiges Objekt.

Daher hängt die Frage von wann mit x oder x.prototype zu gehen, von Ihren Anforderungen ab.

Zum Beispiel:

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); 

In der Tat, ein Objekt keine prototype Eigenschaft besitzen. Sie verwenden den anderen Ansatz, wenn Sie ein Objekt von einigen Konstruktorfunktion der Prototyp erstellt werden soll:

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

Vielen Dank, viel klarer jetzt :)! –

Verwandte Themen