Diese Methode ist vom Autor nicht original. Ich habe es gerade auf der Grundlage der Vorgänger zusammengefasst und eine kurze und praktische JavaScript -Erbschaftsmethode entwickelt.
Traditionelle JavaScript erbt Prototyp -Ketten basierend auf Prototypen und erfordert viele neue Operationen. Der Code ist nicht präzise genug, die Lesbarkeit ist nicht sehr stark und scheint durch Prototypketten leicht kontaminiert zu sein.
Die vom Autor zusammengefasste Vererbungsmethode ist prägnant und klar. Obwohl es nicht der beste Weg ist, hoffe ich, dass es Leser inspirieren kann.
Okay, sag nicht viel Unsinn, schau dir den Code an, die Kommentare sind detailliert, du kannst ihn auf den ersten Blick verstehen ~~~
Die Codekopie lautet wie folgt:
/**
* Erstellt von Yang Yuanon 14-11-11.
* Verwenden Sie keinen Prototyp zur Implementierung der Vererbung
*
*/
/**
* JavaScript -Objekt kopieren, nur eine Schicht kopieren und nur Funktionsattribute kopieren, nicht universell!
* @Param OBJ -Objekt zu kopieren
* @Returns Objekt
*/
Object.Prototype.clone = function () {
var _s = this,,
newObj = {};
_s.each (Funktion (Schlüssel, Wert) {
if (Object.Prototype.toString.call (value) === "[Objektfunktion]") {
Newobj [Schlüssel] = Wert;
}
});
kehre Newobj zurück;
};
/**
* Durch all seine eigenen Eigenschaften wiederholen
*
* @param Callback -Rückruffunktion. Der Rückruf enthält zwei Parameter: Schlüsselattributname und Wert -Attributwert der Schlüsselattribut
*/
Object.Prototype.each = Funktion (Rückruf) {
var key = "",
_this = this;
für (Schlüssel in _this) {
if (Object.Prototype.hasownProperty.call (_this, Schlüssel)) {
Rückruf (Schlüssel, _This [Schlüssel]);
}
}
};
/**
* Erstellen Sie Unterklassen
* @param ext obj, enthält Methoden, die neu schreiben oder erweitert werden müssen.
* @Returns Objekt
*/
Object.Prototype.extend = Funktion (ext) {
var child = this.clone ();
ext.each (Funktion (Schlüssel, Wert) {
Kind [Schlüssel] = Wert;
});
Kind zurückkehren;
};
/**
* Erstellen Sie ein Objekt (Instanz)
* @Param -Argumente können eine beliebige Anzahl von Parametern als Liste von Konstruktorparametern akzeptieren
* @Returns Objekt
*/
Object.Prototype.create = function () {
var obj = this.clone ();
if (obj.construct) {
obj.construct.apply (obj, Argumente);
}
Rückkehr obj;
};
/**
* Useage -Beispiel
* Verwenden Sie diese Methode zum Erben und vermeiden Sie den mühsamen Prototyp und neu.
* Das von mir geschriebene Beispiel kann jedoch nur die Funktion der übergeordneten Klasse erben (kann als Mitgliedsmethode verstanden werden).
* Wenn Sie mehr reichhaltige Inhalte erben möchten, verbessern Sie bitte die Klonmethode.
*
*
*/
/**
* Tiere (Eltern)
* @type {{construct: construct, eat: eat}}
*/
var Animal = {
Konstrukt: Funktion (Name) {
this.name = name;
},
essen: function () {
console.log ("Mein Name ist"+this.name+". Ich kann essen!");
}
};
/**
* Vogel (Unterklasse)
* Vögel überschrieben die Methode der Elternklasse Eat und erweitern die Fliegenmethode
* @type {subclass | void}
*/
var bire = Animal.extend ({{
Essen: Funktion (Lebensmittel) {
console.log ("Mein Name ist"+this.name+". Ich kann essen"+food+"!");
},
fly: function () {
console.log ("Ich kann fliegen!");
}
});
/**
* Erstellen Sie die Vogelinstanz
* @type {jim}
*/
var birdjim = bird.create ("jim"),
BirdTom = Bird.create ("Tom");
Birdjim.eat ("Wurm"); // Mein Name ist Jim. Ich kann Wurm essen!
Birdjim.fly (); // Ich kann fliegen!
BirdTom.eat ("Reis"); // Mein Name ist Tom. Ich kann Reis essen!
BirdTom.fly (); // Ich kann fliegen!