Ich habe versucht, mit OO JavaScript in den Griff zu bekommen und ein einfaches Beispiel erstellt.OO JavaScript Aufruf Elternmethode
function BasePage(name) {
this.init(name);
}
BasePage.prototype = {
init: function(name) {
this.name = name;
},
getName: function() {
return this.name;
}
}
function FaqPage (name, faq) {
this.init(name, faq);
}
FaqPage.prototype = new BasePage();
FaqPage.prototype = {
init: function(name, faq) {
BasePage.prototype.init.call(this, name);
this.faq = faq;
},
getFaq: function() {
return this.faq;
}
}
var faqPage = new FaqPage('Faq Page', 'Faq');
var text = faqPage.getName() + ' ' + faqPage.getFaq();
$('body').text(text);
Das Ergebnis läuft dies in der folgenden Meldung führt:
Uncaught TypeError: Object
#<Object>
has no method 'getName'
Was würde ich wissen, wie kann ich die Methode getName()
in der Superklasse aufrufen, ohne es zu überschreiben, die rufen in der Unterklasse?
Auch wenn meine, wenn Sie denken, dieser Ansatz ist schlecht/gut.
Danke Aadit, ich sehe Augment gut in der Benchmark, die Sie getan haben, aber was ist in Chrome passiert? Graph zeigte Null Operationen? – Stokedout
@Stokedout - Benchmarks sollten mit einem Körnchen Salz genommen werden. Ohne Zweifel ist "Augment" schnell. Die meisten JavaScript-Programmierer sind jedoch Amateure, die schlampigen Code schreiben. Um dies zu kompensieren, optimieren die meisten JavaScript-Engines wie V8 stark. Das Ergebnis ist, dass sogar schlechter Code rasend schnell läuft (manchmal sogar schneller als guter Code, weil schlechte Entwurfsmuster gut optimiert sind). Aber das ist keine Entschuldigung, um schlechten Code zu schreiben. Guter Code ist nicht nur schnell, sondern auch lesbar, ausdrucksstark und leicht zu verstehen und zu pflegen. und "Augment" trifft alle diese Punkte. Es ist eigentlich schnell in Chrome 26. Langsam in 27. –
Cool danke, meine Gründe für den Wechsel zu OO JS sind alles, was Sie gerade erwähnt haben. Ich kann nicht mit den Chrome-Versionen mithalten und kann es kaum abwarten, von den IE-Veröffentlichungen geschossen zu werden ;-). Ein letzter Kommentar zum obigen Code. Wenn ich Konstruktor verwende, dann ist init sicherlich eine Duplizierung derselben Sache? – Stokedout