L'héritage
J'utilise une notation pour l'héritage qui est basé sur ExtJS 3, qui je trouve fonctionne assez proche de l'émulation classique héritage en Java. Essentiellement, il s'exécute comme suit:
// Create an 'Animal' class by extending
// the 'Object' class with our magic method
var Animal = Object.extend(Object, {
move : function() {alert('moving...');}
});
// Create a 'Dog' class that extends 'Animal'
var Dog = Object.extend(Animal, {
bark : function() {alert('woof');}
});
// Instantiate Lassie
var lassie = new Dog();
// She can move and bark!
lassie.move();
lassie.bark();
Les espaces de noms
Je suis d'accord aussi avec Eric Miraglia sur coller pour les espaces de noms, donc le code ci-dessus doit être exécuté à l'intérieur de son propre contexte, en dehors de la fenêtre de l'objet, cela est essentiel si vous voulez que votre code à exécuter en tant que l'un des nombreux simultanée des cadres / les bibliothèques de l'exécution dans la fenêtre du navigateur.
Cela signifie que la seule façon de la fenêtre de l'objet par l'intermédiaire de votre propre espace de noms / module de l'objet:
// Create a namespace / module for your project
window.MyModule = {};
// Commence scope to prevent littering
// the window object with unwanted variables
(function() {
var Animal = window.MyModule.Animal = Object.extend(Object, {
move: function() {alert('moving...');}
});
// .. more code
})();
Interfaces
Vous pouvez également faire usage de plus d'avances de la programmation orientée objet des constructions telles que des interfaces pour améliorer la conception de votre application. Mon approche est d'améliorer l' Function.prototype
afin d'obtenir une notation long de ces lignes:
var Dog = Object.extend(Animal, {
bark: function() {
alert('woof');
}
// more methods ..
}).implement(Mammal, Carnivore);
OO Modèles
Comme pour les "Modèles" dans le Java sens, j'ai seulement trouvé une utilisation pour le pattern Singleton (idéal pour la mise en cache) et le pattern observer pour event-driven fonctionnalités telles que l'attribution des actions quand un utilisateur clique sur un bouton.
Un exemple de l'utilisation du Pattern observer serait:
// Instantiate object
var lassie = new Animal('Lassie');
// Register listener
lassie.on('eat', function(food) {
this.food += food;
});
// Feed lassie by triggering listener
$('#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');
});
Et c'est juste un couple de trucs dans mon sac de OO JS, j'espère qu'ils vous soient utiles.
Je recommande si vous avez l'intention d'aller en bas de cette route que vous avez lu Douglas Crockfords Javascript: les Bonnes Parties. Ses un livre brillant pour ce genre de choses.