Wenn Sie Objektorientierte Programmierung in JavaScript getan haben, werden Sie wissen, dass Sie eine Klasse erstellen können wie folgt:
Person = function(id, name, age){
this.id = id;
this.name = name;
this.age = age;
alert('A new person has been accepted');
}
Bisher hat unsere Klassenperson nur zwei Eigenschaften und wir werden ihr einige Methoden geben. Eine saubere Methode, dies zu tun, ist , um sein 'Prototyp'-Objekt zu verwenden. Ausgehend von JavaScript 1.1 wurde das Prototyp-Objekt in JavaScript eingeführt. Dies ist ein eingebautes Objekt, das den Prozess des Hinzufügens von benutzerdefinierten Eigenschaften und Methoden zu allen Instanzen eines Objekts vereinfacht. sie fügen Sie 2 Methoden zu unserem Klassenobjekt seines ‚Prototyps‘ wie folgt verwendet:
Person.prototype = {
/** wake person up */
wake_up: function() {
alert('I am awake');
},
/** retrieve person's age */
get_age: function() {
return this.age;
}
}
Jetzt haben wir unsere Klasse Person definiert haben. Was wäre, wenn wir eine andere Klasse namens Manager definieren möchten, die einige Eigenschaften von Person erbt. Es gibt keinen Grund, all diese Eigenschaften erneut zu definieren, wenn wir unsere Manager-Klasse definieren, wir können sie einfach so festlegen, dass sie von der Klasse Person erben. kein JavaScript in Vererbung gebaut haben, aber wir eine Technik verwenden, können die Vererbung zu implementieren, wie folgt:
Inheritance_Manager = {};
// Wir schaffen eine Erbschaft Manager-Klasse (der Name ist beliebig)
Nun wollen wir unser Erbe Klasse geben eine Methode namens extend, die die Argumente baseClass und subClassas verwendet. Innerhalb der extend-Methode erstellen wir eine innere Klasse namens vererbung function vererbung() {}. Der Grund, warum wir diese innere -Klasse verwenden, besteht darin, Verwechslungen zwischen den baseClass- und subClass-Prototypen zu vermeiden. Als nächstes stellen wir den Prototyp unserer Vererbungsklasse auf den baseClass-Prototyp wie mit dem folgenden Code: vererbung.prototype = baseClass. Prototyp; Dann kopieren wir den Vererbungs-Prototyp wie folgt in den Unterklassen-Prototyp: subClass.prototype = new vererbung(); Als nächstes müssen Sie den Konstruktor für unsere Unterklasse wie folgt angeben: subClass.prototype.constructor = subClass; Sobald wir mit unserem SubClass-Prototyping fertig sind, können wir die nächsten zwei Codezeilen festlegen, um einige Basisklassenzeiger zu setzen.
subClass.baseConstructor = baseClass;
subClass.superClass = baseClass.prototype;
Hier ist der vollständige Code für unsere verlängern Funktion:
Inheritance_Manager.extend = function(subClass, baseClass) {
function inheritance() { }
inheritance.prototype = baseClass.prototype;
subClass.prototype = new inheritance();
subClass.prototype.constructor = subClass;
subClass.baseConstructor = baseClass;
subClass.superClass = baseClass.prototype;
}
Jetzt, wo wir unser Erbe umgesetzt haben, können wir es benutzen unsere Klassen zu erweitern. In diesem Fall sind wir zu werden unsere Klasse Person in eine Manager-Klasse erweitern, wie folgt:
Wir definieren die Klasse Manager
Manager = function(id, name, age, salary) {
Person.baseConstructor.call(this, id, name, age);
this.salary = salary;
alert('A manager has been registered.');
}
wir machen es Form Person
Inheritance_Manager.extend(Manager, Person);
Wenn Sie erben bemerkt, wir haben gerade die extend-Methode unserer Inheritance_Manager-Klasse aufgerufen und den subClass-Manager in unserem Fall und dann die baseClass-Person übergeben. Beachten Sie, dass die Reihenfolge hier sehr wichtig ist. Wenn Sie sie vertauschen, funktioniert die Vererbung nicht mehr wie gewünscht. Beachten Sie auch, dass Sie diese Vererbung angeben müssen, bevor Sie unsere Unterklasse definieren können. Jetzt definieren wir unsere Unterklasse:
Wir können weitere Methoden wie die unten hinzufügen. Unsere Manager-Klasse enthält immer die Methoden und Eigenschaften, die in der Person-Klasse definiert sind, weil sie von ihr erbt.
Manager.prototype.lead = function(){
alert('I am a good leader');
}
Jetzt testen sie uns zwei Objekte erstellen lassen, eine aus der Klasse Person und eine von der vererbten Klasse Manager:
var p = new Person(1, 'Joe Tester', 26);
var pm = new Manager(1, 'Joe Tester', 26, '20.000');
Fühlen Sie sich frei im ganzen Code und Kommentare zu erhalten: http://www.cyberminds.co.uk/blog/articles/how-to-implement-javascript-inheritance.aspx
Die Art, wie Sie es verwendet haben, ist fast richtig, aber Sie könnten Object.create() verwenden, anstatt die Basis mit dem neuen Schlüsselwort zu instanziieren (könnte Probleme verursachen, wenn der Basiskonstruktor Argumente benötigt). Ich habe Details in meinem Blog: http://ncombo.wordpress.com/2013/07/11/javascript-inheritance-done-right/ – Jon
Beachten Sie auch, dass Product() effektiv zweimal aufgerufen wird. –