Versuch inheritnace in Javascript und total verwirrtWie erben Sie anonyme JavaScript-Funktionen, die Variablen zugewiesen sind?
ich nur verstehen müssen, dass Dogcat bark
und meow
Funktion haben und in der Lage this
(irgendwie) jedes Objekt in Vererbungskette zuzugreifen:
var cat = function() { this.name = "tom"; this.cat_instance = this; }
var dog = function() { this.name = "bob"; this.dog_instance = this; console.log("cat is here!");}
cat.prototype.meow = function() { console.log("mhew"); }
dog.prototype.bark = function() { console.log("whoof"); }
var DogCat = function() {
DogCat.prototype = dog.prototype;
DogCat.constructor = cat;
console.log("my name is " + this.dog_instance + " " + this.cat_instance);
}
So DogCat.prototype
jetzt (sollte?) zeigen Sie auf dog
Prototyp und in der Instanz von DogCat
Ich sollte mindestens bark
Funktion erhalten, aber Instanz hat diese Funktion nicht.
Okay, das ist ein Chaos (in meinem Kopf), versuche ich bin jetzt gelten beide geerbt Bauer zu einem Kind:
var DogCat = function() {
cat.apply(this);
dog.apply(this);
console.log("my name is " + this.dog_instance + " " + this.cat_instance);
}
Dann einen Prototyp zu einem Hund zeigen:
DogCat.prototype = dog.prototype;
var d = new DogCat();
> cat is here!
>my name is [object Object] [object Object]
Jetzt Ich kann auf die bark
zugreifen, aber wie mit meow
Funktion umgehen? Wie baut man eine Prototypkette richtig?
UPD
leider in DogCat
sollte es DogCat.prototype = dog.prototype
,
Die erste Regel der Prototypen lautet: [Weisen Sie ihnen niemals im Konstruktor zu] (http://stackoverflow.com/q/21296559/1048572). Die zweite Regel von JS-Prototypen lautet: Es gibt keine [Mehrfachvererbung] (https://en.wikipedia.org/wiki/Multiple_inheritance). Es tut uns leid. – Bergi
Vielen Dank für das Löschen! Aber wie erstellt man komplexe Anwendungen und vermeidet, wie man Code-Duplizierung vermeidet? einfach prototypische Eigenschaften wie 'DogCat.prototype.meow = cat.prototype.meow;'? –
Ja, es gibt viel mehr Muster, um Code-Duplikation zu vermeiden als nur Vererbung. Welche davon am besten zu Ihrer Situation passt, hängt davon ab; Wenn Sie Ihren echten Code zeigen, können wir Ihnen etwas vorschlagen. – Bergi