Staram się opanować OO JavaScript i stworzyłem prosty przykład.OO Metoda macierzysta wywołania JavaScriptu
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);
Wynikiem działania skutkuje następującym komunikatem:
Uncaught TypeError: Object
#<Object>
has no method 'getName'
Co chciałbym wiedzieć, w jaki sposób można wywołać metodę getName()
w super klasy bez konieczności zastąpić i nazwać w podklasie?
Również jeśli moje, jeśli uważasz, że to podejście jest złe/dobre.
Dzięki Aadit, widzę, że Augment dobrze się spisał w benchmarku, który zrobiłeś, ale co się stało w Chrome? Wykres pokazał zero operacji? – Stokedout
@Stokedout - Testy należy wykonywać z przymrużeniem oka. Bez wątpienia 'augment' jest szybki. Jednak większość programistów JavaScriptu to amatorzy, którzy piszą niechlujny kod. Aby zrekompensować to większość silników JavaScript, takich jak V8, należy go zoptymalizować. Powoduje to, że nawet zły kod działa niesamowicie szybko (czasami nawet szybciej niż dobry kod, ponieważ złe wzorce projektowe są dobrze zoptymalizowane). To jednak nie jest wymówka, aby napisać zły kod. Dobry kod jest nie tylko szybki, ale także czytelny, ekspresyjny i łatwy do zrozumienia i utrzymania; a 'augment' trafia we wszystkie te punkty. Jest naprawdę szybki w Chrome 26. Powolne w 27. –
Fajne dzięki, moje powody zmiany na OO JS to wszystko, o czym właśnie wspomniałeś. Nie mogę nadążyć za wydaniami Chrome i nie mogę się doczekać, kiedy zobaczę premiery IE ;-). Jeden końcowy komentarz na temat powyższego kodu. Jeśli używam konstruktora, to na pewno init jest duplikacją tego samego? – Stokedout