Ich arbeite mit Professional JavaScript für Webentwickler und habe eine Frage bezüglich Objekterstellung und Vererbung. In diesem Buch wird das Dynamic Prototype Pattern als eine nette Methode zum Kombinieren von Konstruktor/Prototyp-Mustern diskutiert, während Konstruktor und Prototyp in der Objektdefinition gekapselt bleiben. Wie folgt aus:JavaScript - Dynamisches Prototypmuster + Parasitäre Kombinationsvererbung
function Person(name, age, job) {
this.name = name;
this.age = age;
this.job = job;
if (typeof this.sayName != "function") {
Person.prototype.sayName = function() {
return this.name;
};
}
}
Von allen Objekterstellung Muster in dem Buch besprochen, fühlte ich mich wie dieses am besten aussah. Wenn dann die Vererbung diskutiert wird, sagt das Buch, dass parasitische Kombinationsvererbung als das optimale Vererbungsparadigma angesehen wird. Wie folgt:
function inheritPrototype(subType, superType) {
var prototype = Object.create(superType.prototype);
prototype.constructor = subType;
subType.prototype = prototype;
}
function SuperType(name) {
this.name = name;
this.colors = ['red', 'blue', 'green'];
}
SuperType.prototype.sayName = function() {
return this.name;
};
function SubType(name, age) {
SuperType.call(this, name);
this.age = age;
}
inheritPrototype(SubType, SuperType);
SubType.prototype.sayAge = function() {
return this.age;
}
Wie Sie sehen können, dieser Code die Kombination Constructor/Prototyp-Muster für die Erstellung von Objekten verwendet, wo die Prototypen außerhalb der ursprünglichen Objekterstellung deklariert sind. Meine Frage ist, gibt es eine Ausgabe mit dem dynamischen Prototyp-Muster mit Parasitäre Kombination Vererbung kombiniert, wie folgt aus:
function inheritPrototype(subType, superType){
var prototype = Object.create(superType.prototype);
prototype.constructor = subType;
subType.prototype = prototype;
}
function SuperType(name) {
this.name = name;
this.colors = ['red', 'blue', 'green'];
if (typeof this.sayName != "function") {
SuperType.prototype.sayName = function() {
return this.name;
};
}
}
function SubType(name, age) {
SuperType.call(this, name);
this.age = age;
if (typeof this.sayAge != "function") {
SubType.prototype.sayAge = function() {
return this.age;
};
}
}
inheritPrototype(SubType, SuperType);
ich dies in einem jsfiddle here getestet haben und es scheint gut zu funktionieren, ich wollte nur machen sicher, dass ich etwas nicht vermisse, das später Probleme mit diesem Muster/Vererbung verursachen wird.
Auch, wie ich weiß, dieses Buch ist ein wenig älter, gibt es neue Standards für die Erstellung und Vererbung von Objekten?
'inheritPrototype' muss' Object' verwenden.create 'not' Object' – Bergi
Ich muss sagen, dass "dynamic prototyp pattern" für meine Augen ziemlich hässlich aussieht ... Auch Prototyp-Methoden sollten statisch, nicht dynamisch sein, so könnte man argumentieren, dass sie im Konstruktor erstellt werden (wenn auch nur dynamisch) ist eine schlechte Übung. Wenn Sie nach syntaktischer Kapselung suchen, verwenden Sie lieber einen IIFE um Konstruktor + Vererbung + Prototyp oder verwenden Sie einfach ES6-Klassen. – Bergi