Redéfinition des méthodes en Javascript

Je voudrais savoir quelle est la différence entre les méthodes surchargées avec des prototypes et sans prototypes. Considérer:

Exemple 1:

function Animal() {
    this.sleep = function () {
        alert("animal sleeping");
    };

    this.eat = function () {
        alert("animal eating");
    };
}

function Dog() {
    this.eat = function () {
        alert("Dog eating");
    };
}

Dog.prototype = new Animal;

var dog = new Dog;

dog.eat();

Exemple 2:

function Animal() { }

function Dog() { }

Animal.prototype.sleep = function () {
    alert("animal sleeping");
};

Animal.prototype.eat = function () {
    alert("animal eating");
};

Dog.prototype = new Animal;

Dog.prototype.eat = function () {
    alert("Dog eating");
};

var dog = new Dog;

dog.eat();

Je me sens à la fois des exemples de produire le même effet que le Dog classe est primordial manger de la méthode de la Animal classe. Ou est-il rien de différent de ce qui se passe?

Vous devez utiliser this mot-clé lors de la définition des propriétés d'un objet dans son constructeur.
désolé manqué le mot-clé this. Édité à la question maintenant.
C'est presque toujours une bonne idée de mettre des méthodes sur le prototype, alors qu'ils sont partagés entre toutes les instances. Les mettre dans votre constructeur de copies à travers toutes les instances et cela consomme plus de mémoire.
Donc, en dehors des problèmes de mémoire, est-il un autre problème?
Les fonctions déclarées en tant que propriétés de this à l'intérieur d'un constructeur de prévenir les variables privées du constructeur de déchets collectées, même s'ils ne peuvent pas fermer sur toutes les variables privées elles-mêmes. Cependant, puisque ce peut être classé comme un mémoire préoccupation, je dirais: non, il n'y a pas d'autres questions. C'est juste populaires pratique de codage, de placer des méthodes sur la prototype.

OriginalL'auteur codingsplash | 2013-03-19