Warum sollten Eigenschaften für den Prototyp für Instanzvariablen in JavaScript deklariert werden?
Ich versuche, meinen Kopf um dieses schwarze Kunst genannt, JavaScript - und, ich muss zugeben, ziemlich aufgeregt. Ich habe auf der Suche im code-Beispiele, vor allem aus easeljs, da das ist, was ich verwenden werde, vor allem. Und ich bin ein bisschen verwirrt..
Ich (denke ich) verstehen den Unterschied zwischen der Verwendung der Prototyp für Funktionen oder Eigenschaften, die 'class' - Variablen und verwenden diese.someProp für 'instance' - Variablen (ja, ich verstehe, dass es gibt keine Klassen in JavaScript.)
Den code habe ich mir angeschaut, und bin mit, die als Vorlage für meinen eigenen code erklären Prototyp Variablen und bezieht sich dann auf Sie mit diesem also
Im Konstruktor: this.name = name;
Dann eine Erklärung: Objekt.der Prototyp.name;
Und später.name = "Freddy";
Dies ist innerhalb von Funktionen aufgerufen, die mit 'neu' in diesem Fall also, so wie ich es verstehe, "diese" bezieht sich auf das aktuelle Objekt. Was mich verwirrt ist was der Prototyp-Deklaration macht und warum verwenden wir Sie für Instanz-Variablen?
Dank, Dave
OK, ein wenig Klärung. In den folgenden code, ich sehe nicht, was die Prototyp-Deklaration von radius erreichen:
(function(){
//constructor
function MyCircle(radius){
this.radius = radius;
}
MyCircle.prototype.radius;
this.area = function(){
return 3.14*this.radius*this.radius;
};
window.MyCircle = MyCircle;
}());
InformationsquelleAutor der Frage DaveM | 2013-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Wert auf einem Prototyp hat einen Schlüssel Verhalten, dass andere von einem Grundstück direkt auf die Instanz. Versuchen Sie dies:
Dies wäre nicht möglich ohne die prototypische Vererbung.
Können Sie testen, ob die Eigenschaft der Instanzen-Eigenschaft oder die prototype-Eigenschaft mithilfe der
hasOwnProperty
Methode.Einer Instanz außer Kraft setzen können
prototype
Wert.Und zurück zu den
prototype
Wert.Dies ist ein mächtiger Teil der prototypischen Vererbung.
In die anderen Muster:
Den
this.name
variable deklariert ist wieder mit jeder neuen Instanz.Macht es einen Sinn, um Methoden als Funktionen deklariert, die auf dem Prototyp. Anstatt die definition der Funktion neu deklariert, auf jeder Instanz, die alle Instanzen können gemeinsam eine einzige Funktion.
In Bezug auf die Variablen, sondern als Funktionen, die der Prototyp kann möglicherweise verwendet werden, für die default-Werte in dem Fall, dass eine Instanz nicht Ihren eigenen Wert.
Den code in ein Turnschuh
InformationsquelleAutor der Antwort Stuart Wakefield
Einem gespeicherten Wert für den Prototyp bietet eine Standard Wert für diese Eigenschaft.
Wenn Sie anschließend das schreiben eines Wertes an die Eigenschaft, die Instanz erwerben diesen neuen Wert, ausblenden der Wert, der auf den Prototyp, die intakt gelassen werden.
Im Kontext des code haben Sie nun die Frage:
tut absolut nichts. Es ist eine no-op - es wird versucht Lesendass Eigentum und verwirft dann das Resultat.
InformationsquelleAutor der Antwort Alnitak
Ja, ich Stimme der Prototyp kann verwendet werden, für die default-Werte der Eigenschaften (Variablen). Die Konstruktor-Funktion brauchen wir nicht zu erklären Vermögen; es kann getan werden, bedingt.
Sehen, wie Lucy ' s
age
bedingt deklariert und initialisiert.InformationsquelleAutor der Antwort Michael R
Anderen Antworten bereits erklärt, der Unterschied zwischen Prototyp vs-Instanz Eigenschaften.
Aber nur um die Antwort, lasst uns brechen Ihre code-snippet:
IIFE
fungiert als scope-container für den inneren codeMyCircle
mit einem Konstruktor-Muster (aber beachten Sie, dass es nie "gebaut", also wohl sollte loszuwerden, die Großbuchstaben, da es irreführend)radius
Instanz-Eigenschaft auf dem Objekt aufgerufenradius
Eigenschaft aufMyCircle
Funktionprototype
die nicht vorhanden sind, so auswertet, umundefined
area
Instanz-Eigenschaft auf den globalen window-Objekts und zuweisen einer Funktion AusdruckMyCircle
Instanz-Eigenschaft auf einewindow
- Objekt und weist es derMyCircle
FunktionZusammenfassung: Es scheint, wie es um die Schaffung einer
area
undMyCircle
Eigenschaften auf der globalenwindow
Objekt, und wennMyCircle
aufgerufen wird, erstellt es eine zusätzlicheradius
Eigenschaft.Verwendung: MyCircle aufgerufen werden soll, bevor die Fläche da Fläche stützt sich auf MyCircle Initialisierung des radius:
InformationsquelleAutor der Antwort linasmnew