Javascript Simple de l'héritage à l'aide de $.étendre et motif de module

J'ai demandé pour un couple d'années maintenant, ce que pensent les gens de faire de l'héritage avec un module-pattern-esque constructeur de motif et SANS des prototypes de l'héritage. Pourquoi les programmeurs de ne pas utiliser un module de modèle pour les non-singleton js les classes? Pour moi les avantages sont:

  • Très clair publics et privés de la portée (facile à comprendre le code et de l'api)
  • Pas besoin de suivre le " ce " pointeur via $.proxy(fn, c') des rappels
  • Pas plus var que = ce, etc. avec les gestionnaires d'événements, etc. Chaque fois que je vois un "il", je sais que c'est le contexte qui est passé dans une fonction de rappel, il n'est PAS quelque chose que je suis suivi de la connaissance de mon instance de l'objet.

Inconvénients:

  • Petite perf dégradation
  • Risque possible "remuer du doigt" de Doug Crockford?

Envisager (juste courir dans tous les js console)

var Animal = function () {
    var publicApi = {
        Name: 'Generic',
        IsAnimal: true,
        AnimalHello: animalHello,
        GetHelloCount:getHelloCount
    };

    var helloCount = 0;

    function animalHello() {
        helloCount++;
        console.log(publicApi.Name + ' says hello (animalHello)');
    }

    function getHelloCount(callback) {
        callback.call(helloCount);
    }

    return publicApi;
};

var Sheep = function (name) {
    var publicApi = {
        Name: name || 'Woolie',
        IsSheep: true,
        SheepHello: sheepHello
    };

    function sheepHello() {
        publicApi.AnimalHello();
        publicApi.GetHelloCount(function() {
            console.log('i (' + publicApi.Name + ') have said hello ' + this + ' times (sheepHello anon callback)');
        });
    }

    publicApi = $.extend(new Animal(), publicApi);
    return publicApi;
};

var sheepie = new Sheep('Sheepie');
var lambie = new Sheep('Lambie');

sheepie.AnimalHello();
sheepie.SheepHello();
lambie.SheepHello();

Ma question est: quels sont les inconvénients à cette approche que je ne suis pas le voir? Est-ce une bonne approche?

Merci!

[mise à jour]

Merci pour les excellentes réponses. Souhaite que je pourrais donner à chacun la bounty. C'était ce que je cherchais. Fondamentalement, ce que je pensais. Je n'aurais jamais utiliser le module de modèle à construire plus de quelques cas de quelque chose. Habituellement, seulement un couple. La raison pour laquelle je pense qu'il a ses avantages est toute petite perf dégradation de vous voir qui est repris dans la simplicité de la programmation. Nous avons BEAUCOUP de code à écrire ces jours-ci. Nous avons également de réutiliser des autres peuples code et personnellement j'apprécie quand quelqu'un a pris le temps de créer un joli modèle élégant, plutôt que dogmatique, en adhérant à des prototypes de l'héritage lorsque cela a du sens.