Tôi đã cố gắng nắm bắt được mã OO JavaScript và tạo một ví dụ đơn giản.Phương thức cha mẹ gọi hàm JavaScript OO
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);
Kết quả của việc chạy kết quả này trong các thông báo sau:
Uncaught TypeError: Object
#<Object>
has no method 'getName'
Những gì tôi muốn biết là làm thế nào tôi có thể gọi phương thức getName()
trong lớp siêu mà không cần phải ghi đè lên và gọi nó là trong lớp phụ?
Ngoài ra nếu tôi nếu bạn cho rằng phương pháp này là xấu/tốt.
Cảm ơn Aadit, tôi thấy Augment khá tốt trong tiêu chuẩn bạn đã làm, nhưng điều gì đã xảy ra trong Chrome? Biểu đồ cho thấy hoạt động bằng không? – Stokedout
@Stokedout - Các điểm chuẩn nên được thực hiện với một hạt muối. Không có nghi ngờ 'augment' là nhanh. Tuy nhiên, hầu hết các lập trình viên JavaScript đều là những người chuyên nghiệp viết mã sloppy. Để bù đắp cho hầu hết các công cụ JavaScript như V8, nó đã tối ưu hóa nó rất nhiều. Kết quả là ngay cả mã xấu chạy nhanh chóng (đôi khi thậm chí còn nhanh hơn mã tốt vì các mẫu thiết kế xấu cũng được tối ưu hóa tốt). Tuy nhiên đó không phải là lý do để viết mã xấu. Mã tốt không chỉ nhanh mà còn có thể đọc được, diễn cảm và dễ hiểu và dễ bảo trì; và 'augment' đánh trúng tất cả những điểm này. Nó thực sự nhanh chóng trong Chrome 26. Làm chậm trong 27. –
Cảm ơn bạn, lý do tôi thay đổi thành OO JS là tất cả những gì bạn vừa đề cập. Tôi không thể theo kịp các bản phát hành của Chrome và không thể chờ để được phát hành bản phát hành IE ;-). Một bình luận cuối cùng về mã trên. Nếu tôi sử dụng constructor thì chắc chắn init là một bản sao của cùng một điều? – Stokedout