Javascript Vererbung: Aufruf des super-Konstruktors verwendet wird, oder mit Prototypen-Kette?
Ganz vor kurzem Las ich über die JavaScript-Aufruf Nutzung in MDC
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/call
eine linke der unten angegebenen Beispiel, ich verstehe immer noch nicht.
Warum sind Sie mit der Vererbung hier wie diese
Prod_dept.prototype = new Product();
ist das notwendig? Denn es ist ein Aufruf an den super-Konstruktor in
Prod_dept()
sowieso, wie diese
Product.call
ist diese nur aus gängigen Verhalten? Wann ist es besser, zu nennen, für den super-Konstruktor, oder verwenden Sie die Prototyp-Kette?
function Product(name, value){
this.name = name;
if(value >= 1000)
this.value = 999;
else
this.value = value;
}
function Prod_dept(name, value, dept){
this.dept = dept;
Product.call(this, name, value);
}
Prod_dept.prototype = new Product();
//since 5 is less than 1000, value is set
cheese = new Prod_dept("feta", 5, "food");
//since 5000 is above 1000, value will be 999
car = new Prod_dept("honda", 5000, "auto");
Danke für die Dinge klarer
InformationsquelleAutor der Frage Jeremy S. | 2010-11-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Antwort auf die eigentliche Frage ist, dass Sie brauchen, beides zu tun:
Daher sollten Sie nicht rufen Sie die übergeordneten Konstruktor beim einrichten der Vererbung. Nur bei der Instanziierung ein Objekt,, erbt von einem anderen.
Chris Morgan ' s Antwort ist fast abgeschlossen, fehlt ein kleines detail (constructor-Eigenschaft). Lassen Sie mich vorschlagen, eine Methode, um das setup-Vererbung.
Siehe meinen blog-post für noch mehr syntaktischen Zucker beim erstellen von Klassen. http://js-bits.blogspot.com/2010/08/javascript-inheritance-done-right.html
Technik kopiert von Ext-JS und http://www.uselesspickles.com/class_library/ und ein Kommentar von https://stackoverflow.com/users/1397311/ccnokes
InformationsquelleAutor der Antwort Juan Mendes
Der ideale Weg, es zu tun ist, um nicht tun
Prod_dept.prototype = new Product();
weil dieser fordert, dieProduct
Konstruktor. Also der ideale Weg ist, um zu Klonen, außer für den Konstruktor, so etwas wie dieses:Dann der super-Konstruktor aufgerufen wird bei der Bauzeit, die ist, was Sie wollen, denn dann übergeben Sie den Parameter auch.
Wenn man sich auf Dinge wie die Google Schließung der Bibliothek sehen Sie, wie Sie es tun.
InformationsquelleAutor der Antwort Chris Morgan
Wenn Sie getan haben, der Objekt-Orientierten Programmierung in JavaScript, kennen Sie, können Sie eine Klasse erstellen wie folgt:
So weit, unsere Klasse person, die hat nur zwei Eigenschaften, und wir geben es einige Methoden. Eine saubere Art und Weise, dies zu tun ist
seine "Prototyp" - Objekt.
Ab JavaScript 1.1, das Prototyp-Objekt eingeführt, in JavaScript. Dies ist ein eingebautes Objekt, das
vereinfacht den Prozess zum hinzufügen von benutzerdefinierten Eigenschaften und Methoden, um alle Instanzen eines Objekts.
Nun fügen wir 2 Methoden, um unsere Klasse mit Ihrem 'Vorbild' - Objekt wie folgt:
Nun definieren wir unsere Klasse Person. Was, wenn wir wollten, um zu definieren, eine weitere Klasse namens-Manager, der erbt einige Eigenschaften von Person. Es gibt keinen Punkt Neudefinition aller dieser Eigenschaften wieder, wenn wir definieren unsere Manager-Klasse, können wir nur setzen Sie ihn auf Erben von der Klasse Person.
JavaScript nicht gebaut haben, die an der Vererbung, aber wir können eine Technik zum implementieren der Vererbung wie folgt:
Inheritance_Manager = {};
//Wir erstellen eine erbschaft manager-Klasse (der name ist beliebig)Nun geben wir unser Erbe-Klasse eine Methode namens " erweitern, welche die baseClass und subClassas Argumente.
In die extend-Methode erstellen wir eine innere Klasse namens erbschaft-Funktion Vererbung() { }. Der Grund, warum wir mit dieser inneren
Klasse ist, um Verwirrung zu vermeiden zwischen den baseClass-und Unterklasse Prototypen.
Als Nächstes machen wir den Prototyp unserer Vererbung class Punkt der baseClass Prototyp mit dem folgenden code:
die Vererbung.Prototyp = baseClass. Prototyp;
Dann kopieren wir die Prototyp-Vererbung in die Unterklasse Prototyp wie folgt: Unterklasse.prototype = new Erbe();
Der nächste Schritt ist das festlegen der Konstruktor für unsere Unterklasse wie folgt: Unterklasse.der Prototyp.Konstruktor = Unterklasse;
Einmal fertig mit unserer Unterklasse prototyping, können wir bestimmen, die nächsten zwei Zeilen code, um einige Zeiger auf Basisklasse.
Hier ist der vollständige code für das erweitern der Funktion:
Dass wir jetzt umgesetzt haben, ist unser Erbe, wir können beginnen, es zu erweitern unsere Klassen. In diesem Fall werden wir
erweitern unsere Klasse "Person" in einer Manager-Klasse wie folgt:
Definieren wir die Klasse Manager Klasse
wir machen es Erben von Person
Wenn Euch aufgefallen ist, wir haben gerade angerufen die extend-Methode unserer Inheritance_Manager-Klasse, und übergeben die Unterklasse Manager in unserem Fall und dann die baseClass Person. Beachten Sie, dass die Reihenfolge ist hier sehr wichtig. Wenn du Sie tauschen, das Erbe
wird nicht funktionieren, wie Sie sollen, wenn überhaupt.
Beachten Sie auch, dass Sie angeben müssen, wird diese Vererbung, bevor Sie tatsächlich definieren unsere Unterklasse.
Jetzt lassen Sie uns definieren, unsere Unterklasse:
Wir können mehr Methoden als die unten. Unsere Manager-Klasse wird immer die Methoden und Eigenschaften definiert, die in der Person-Klasse, weil es erbt von.
Nun zu testen, ermöglicht es uns, erstellen Sie zwei Objekte, wobei das eine aus der Klasse Person und eine von der geerbten Klasse Manager:
Fühlen Sie sich frei, um die komplette code und weitere Kommentare unter:
http://www.cyberminds.co.uk/blog/articles/how-to-implement-javascript-inheritance.aspx
InformationsquelleAutor der Antwort Joe Francis