2010-11-21 3 views
4

J'essaie d'avoir une bonne idée des constructeurs javascript et s'ils sont vraiment en lecture seule. Voici un scénario de test simple:Constructeurs JavaScript

var A = function(){} 

console.log(A.prototype.constructor == A); //true 

Donc, à ce stade, chaque nouvelle fonction reçoit un objet prototype qui contient le constructeur comme référence. C'est tout bon. Maintenant, considérez ceci:

var B = function() { 
    this.id = 0; 
} 

A.prototype.constructor = B; // what does this do with A? 

Alors maintenant, tous les cas de A devrait obtenir B en tant que constructeur:

var C = new A(); 

console.log(C.constructor == B) // true 

Donc finalement, ce que cela a un effet réel sur chaque instance? Il ne semble pas:

console.log(C.id); // what will this yield? 

Ma question est: quel est le but de l'exposition d'une référence de constructeur? Apparemment, vous pouvez le définir/le remplacer, mais il ne fait rien sauf changer la référence. Ou est-ce que je manque quelque chose?

Répondre

5

La propriété constructor est juste pour la commodité, elle n'a absolument aucun effet sur le comportement de votre programme. Par défaut, lorsque vous définissez une fonction, func.prototype.constructor est défini sur func lui-même - vous pouvez le définir comme vous le souhaitez ultérieurement et cela ne fait aucune différence. L'objet qui est construit dépend uniquement de la fonction que vous passez à new: si vous faites new A(), il appellera toujours la fonction A.

+1

Salut, chaque article, livre, à propos de l'héritage javascript, nous dit de réparer le constructeur du prototype, après cette situtation: 0: A.prototype = Object.create (B.prototype); ' ' A.prototype.constructor = B // Fixer ici ' Je ne comprends pas ce que fait' Object.create', mais la ligne suivante semble inutile. J'ai écrit du code en l'enlevant et cela n'a aucun effet. Donc ma question est, pourquoi tout le monde dit de * fixer * le constructeur? –