Наследование
Я использую нотацию для наследования , основанную на ExtJS 3 , которая, как мне кажется, работает довольно близко к эмуляции классического наследования в Java. В основном это работает следующим образом:
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();
Пространства имён
Я также согласен с Эриком Мираглиа в том, что он придерживается пространств имен, поэтому приведенный выше код должен запускаться в своем собственном контексте за пределами объекта окна, это важно, если вы собираетесь запускать свой код как одну из многих параллельных фреймворков / библиотек, выполняющихся в окне браузера.
Это означает, что единственный путь к объекту окна - через ваш собственный объект пространства имен / модуля:
window.MyModule = {};
(function() {
var Animal = window.MyModule.Animal = Object.extend(Object, {
move: function() {alert('moving...');}
});
})();
Интерфейсы
Вы также можете использовать более продвинутые конструкции ООП, такие как интерфейсы, для улучшения дизайна вашего приложения. Мой подход к ним состоит в том, чтобы улучшить Function.prototype
обозначение в следующих строках:
var Dog = Object.extend(Animal, {
bark: function() {
alert('woof');
}
}).implement(Mammal, Carnivore);
ОО шаблоны
Что касается «шаблонов» в смысле Java, я нашел применение только шаблону Singleton (отлично подходит для кеширования) и шаблону Observer для функциональных возможностей, управляемых событиями, таких как назначение некоторых действий, когда пользователь нажимает кнопку.
Пример использования паттерна наблюдателя:
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');
});
И это всего лишь пара уловок из моего набора OO JS, надеюсь, они будут вам полезны.
Я рекомендую, если вы собираетесь пойти по этому пути, прочитать Douglas Crockfords Javascript: the Good Parts . Блестящая книга для этого.