Я пытался справиться с OO JavaScript и создал простой пример.OO JavaScript call parent method
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);
Результат выполнения этого приводит следующее сообщение:
Uncaught TypeError: Object
#<Object>
has no method 'getName'
То, что я хотел бы знать, как я могу вызвать метод getName()
в супер класс без переопределения и назвать его в подклассе?
Также, если мой, если вы считаете, что этот подход плох/хорош.
С уважением, Aadit, я вижу, что Augment хорошо работает в тесте, который вы делали, но что произошло в Chrome? График показал нулевые операции? – Stokedout
@ Stokedout - контрольные точки должны быть взяты с солью. Без сомнения, «увеличение» происходит быстро. Однако большинство программистов JavaScript - любители, которые пишут неаккуратный код. Чтобы компенсировать это, большинство движков JavaScript, таких как V8, сильно оптимизируют его. В результате даже плохой код работает невероятно быстро (иногда даже быстрее, чем хороший код, потому что плохие шаблоны дизайна хорошо оптимизированы). Однако это не повод для написания плохого кода. Хороший код не только быстрый, но и читаемый, выразительный, и легко понять и поддерживать; и «аугмент» поражает все эти моменты. Это действительно быстро в Chrome 26. Замедление в 27. –
Прохладный спасибо, мои причины для перехода на OO JS - это то, о чем вы только что упоминали. Я не могу идти в ногу с релизами Chrome и не могу дождаться, когда вы запустите выпуски IE ;-). Один заключительный комментарий о вышеуказанном коде. Если я использую конструктор, то, конечно, init - это дублирование одной и той же вещи? – Stokedout