Classes JavaScript

Je comprends le code JavaScript de base des pseudo-classes:

function Foo(bar) {
    this._bar = bar;
}

Foo.prototype.getBar = function() {
    return this._bar;
};

var foo = new Foo('bar');
alert(foo.getBar()); //'bar'
alert(foo._bar); //'bar'

Je comprends également que le motif de module, qui peut émuler l'encapsulation:

var Foo = (function() {
    var _bar;

    return {
        getBar: function() {
            return _bar;
        },
        setBar: function(bar) {
            _bar = bar;
        }
    };
})();

Foo.setBar('bar');
alert(Foo.getBar()); //'bar'
alert(Foo._bar); //undefined

Mais il ya de l'onu-programmation orientée objet-comme les propriétés de ces deux modèles. Le premier n'a pas de fournir de l'encapsulation. Ce dernier ne fournit pas d'instanciation. Les deux modèles peuvent être modifiés à l'appui de pseudo-héritage.

Ce que je voudrais savoir c'est si il n'y a aucun motif qui permet de:

  • Héritage
  • Encapsulation (soutien pour le "privé" propriétés/méthodes)
  • L'instanciation (peut avoir plusieurs instances de la "classe", chacun avec son propre état)
  • Avez-vous passé en revue une partie de la ces articles?
  • Oui, j'ai un dossier de signets avec des dizaines de la programmation orientée objet JS articles. J'ai lu Crockford, Resig, Osmani, et beaucoup d'autres mieux que moi JS développeurs avis sur la question.
  • Certains frameworks JS comme le Prototype de fournir un soutien accru pour la création de classes. prototypejs.org/learn/class-inheritance
  • Je me souviens avoir vu des réponses relatives à ce pour des questions sur la façon de créer des "protégés", les variables/méthodes en Javascript. Je n'en trouve pas pour le moment, mais vous pourriez avoir plus de chance à la recherche pour ce terme. (Je vous conseille de ne pas essayer de si dur, ça devient vraiment compliqué et pas idiomatiques)
  • Je discuter de certains de ces modèles de la façon de traiter cette question dans mon blog. S'il vous plaît vérifier: ncombo.wordpress.com/2012/12/30/...
  • Vous pourriez être intéressé à la Machine, ou plus précisément le code qu'il produit lors de la compilation de ses classes en valide JS. Tous les vrais typage à la compilation, mais il produit des prototypes qui se comportent tout à fait comme les classes traditionnelles.
  • Si vous êtes à la recherche pour les échantillons de code pour imiter de la programmation orientée objet des comportements similaires à des langages de programmation comme java en JavaScript, Checkout Classe JavaScript ici.

InformationsquelleAutor FtDRbwLXw6 | 2012-09-26