John Resig ist Javascript Vererbung snippet veraltet?
Ich bin auf der Suche nach eine einfache Möglichkeit der Schaffung von zwei Klassen, einem Erben von der anderen, und das Kind eine Neudefinition der Eltern-Methoden und-innerhalb der neuen Methode, den Aufruf der Eltern.
Zum Beispiel, dass eine Klasse Animal
und Dog
, wo die Tier-Klasse definiert eine Methode makeSound()
das festlegt, wie die Ausgabe eines sounds, der Hund setzt dann in seiner eigenen makeSound()
Methode, um ein "wuff" - sound, aber gleichzeitig auch Berufung Tieres makeSound()
zu Ausgabe, wuff.
Sah ich John Resig ' s Modell hier, aber es verwendet die native arguments.callee
Eigenschaft, die offenbar abgeschrieben in ECMA script 5. Heißt das, ich sollte das nicht verwenden von John Resig ' s code?
Was würde eine nette, einfache Art des Schreibens mein Tier/Hund code mit Javascript, prototype-inheritance-Modell?
- Einen breiteren Anwendungsbereich Antwort: Schauen Sie sich diese tolle video-Vorträge von JSON-Erfinder und Javascript-Gott (Ja ich weiß, alle Götter haben auch Fehler, aber Gott ist er trotzdem, denke griechischen Götter nicht "Die Eine") Douglas Crockford: Playlisten youtube.com/playlist?list=PL5586336C26BDB324 und youtube.com/playlist?list=PL7664379246A246CB
- Die folgende Antwort enthält den code für das erzeugen von Instanzen von einem bestimmten Typ, Erben und überschreiben/erweitern von übergeordneten Funktionen, vielleicht ist der hilfreich sein: stackoverflow.com/a/16063711/1641941
Du musst angemeldet sein, um einen Kommentar abzugeben.
Korrigieren, nicht, wenn Sie mit ES5 im strict-Modus. Jedoch, es kann leicht angepasst werden:
if (!Object.create) { Object.create = (function(){ function F(){} return function(o){ if (arguments.length != 1) { throw new Error('Object.create implementation only accepts one parameter.'); } F.prototype = o; return new F() } })(); }
Class.extend()
eine Typ angezeigt vonClass.extend.init
- und Unterklassen, um eine angezeigte Art derproto.(anonymous function)
. Resig ' s original-Codefragment gibt alle Instanzen einer angezeigten Art vonClass
. Die Ausführung* instanceof Class
zurücktrue
für das umschreiben, aber es ist immer noch störend und hässlich in die browser-Konsole.init
- Eigenschaft). Ich habe auch mit der Bezeichnung " Standard-Konstruktoren jetzt.Prototyp-Kette mit Objekt.create() + Konstruktor zuweisen
Dies ist etwas, was ich kam mit Vererbung mit Verkettung sowie die _super zu arbeiten.
Habe ich es getestet auf meinem pixi-wrapper https://github.com/guatedude2/pixijs-cli bisher war es sehr gut funktioniert für mich.
Das einzige Problem, das ich gestoßen bin bei diesem Ansatz ist, dass man nur einmal Erben. Wenn Sie Erben wieder überschreibt er die vorherigen Vererbung.
Bevorzuge ich den Weg Typoskript erzeugt eine form der Vererbung (Wählen Sie die Einfache Vererbung aus dem dropdown). Dass man nicht
arguments.callee
, aber ein__extends
prototype
.