Di sản
Tôi sử dụng ký hiệu cho thừa kế dựa trên ExtJS 3 , mà tôi thấy hoạt động khá gần với mô phỏng kế thừa cổ điển trong Java. Về cơ bản nó chạy như sau:
var Animal = Object.extend(Object, {
move : function() {alert('moving...');}
});
var Dog = Object.extend(Animal, {
bark : function() {alert('woof');}
});
var lassie = new Dog();
lassie.move();
lassie.bark();
Không gian tên
Tôi cũng đồng ý với Eric Miraglia về việc gắn bó với không gian tên vì vậy mã ở trên phải được chạy trong ngữ cảnh riêng của nó bên ngoài đối tượng cửa sổ, điều này rất quan trọng nếu bạn định chạy mã của mình dưới dạng một trong nhiều khung / thư viện đồng thời thực thi trong cửa sổ trình duyệt.
Điều này có nghĩa là cách duy nhất đến đối tượng window là thông qua đối tượng mô-đun / không gian tên của riêng bạn:
window.MyModule = {};
(function() {
var Animal = window.MyModule.Animal = Object.extend(Object, {
move: function() {alert('moving...');}
});
})();
Giao diện
Bạn cũng có thể sử dụng các cấu trúc OOP tiến bộ hơn như giao diện để nâng cao thiết kế ứng dụng của mình. Cách tiếp cận của tôi đối với những điều này là tăng cường Function.prototype
để có được ký hiệu dọc theo những dòng sau:
var Dog = Object.extend(Animal, {
bark: function() {
alert('woof');
}
}).implement(Mammal, Carnivore);
Các mẫu OO
Đối với 'Mẫu' theo nghĩa Java, tôi chỉ thấy sử dụng cho mẫu Singleton (tuyệt vời cho bộ nhớ đệm) và mẫu Observer cho chức năng hướng sự kiện, chẳng hạn như chỉ định một số hành động khi người dùng nhấp vào nút.
Một ví dụ về việc sử dụng Mô hình trình quan sát sẽ là:
var lassie = new Animal('Lassie');
lassie.on('eat', function(food) {
this.food += food;
});
$('#feeding-button').click(function() {
var food = prompt('How many food units should we give lassie?');
lassie.trigger('eat', [food]);
alert('Lassie has already eaten ' + lassie.food + ' units');
});
Và đó chỉ là một vài thủ thuật trong túi OO JS của tôi, hy vọng chúng hữu ích với bạn.
Tôi khuyên nếu bạn có ý định đi theo con đường này, bạn nên đọc Douglas Crockfords Javascript: the Good Parts . Đó là một cuốn sách tuyệt vời cho công cụ này.