Herencia
Utilizo una notación para la herencia que se basa en ExtJS 3 , que encuentro que funciona bastante cerca de emular la herencia clásica en Java. Básicamente se ejecuta de la siguiente manera:
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();
Espacios de nombres
También estoy de acuerdo con Eric Miraglia en ceñirse a los espacios de nombres, por lo que el código anterior debe ejecutarse dentro de su propio contexto fuera del objeto de la ventana, esto es fundamental si desea que su código se ejecute como uno de los muchos marcos / bibliotecas concurrentes que se ejecutan en la ventana del navegador.
Esto significa que la única forma de acceder al objeto de ventana es a través de su propio espacio de nombres / objeto de módulo:
window.MyModule = {};
(function() {
var Animal = window.MyModule.Animal = Object.extend(Object, {
move: function() {alert('moving...');}
});
})();
Interfaces
También puede hacer uso de construcciones OOP más avanzadas, como interfaces, para mejorar el diseño de su aplicación. Mi enfoque para estos es mejorar el Function.prototype
para obtener una notación en estas líneas:
var Dog = Object.extend(Animal, {
bark: function() {
alert('woof');
}
}).implement(Mammal, Carnivore);
Patrones OO
En cuanto a los 'Patrones' en el sentido de Java, solo he encontrado uso para el patrón Singleton (excelente para el almacenamiento en caché) y el patrón Observer para la funcionalidad basada en eventos, como asignar algunas acciones cuando un usuario hace clic en un botón.
Un ejemplo de la utilización del patrón de observador sería:
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');
});
Y eso es solo un par de trucos en mi bolsa de OO JS, espero que te sean útiles.
Le recomiendo que, si tiene la intención de seguir este camino, lea Douglas Crockfords Javascript: the Good Parts . Es un libro brillante para estas cosas.