2012-09-27 1 views
6

objet prototype de chaque fonction a en JavaScript, une propriété non dénombrable constructor qui pointe à la fonction (EcmaScript §13.2). Il est utilisé dans aucune fonctionnalité native (par exemple instanceof vérifie que la chaîne prototype), mais nous are encouraged to adjust it si vous écrasez la propriété prototype d'une fonction de l'héritage:A quoi sert la propriété `constructor`?

SubClass.prototype = Object.create(SuperClass.prototype, { 
    constructor: {value:SubClass, writable:true, configurable:true} 
}); 

Mais, pouvons-nous (y compris moi) faire seulement pour la clarté et la netteté? Y a-t-il des cas d'utilisation réels qui reposent sur le constructor property?

+0

Ce qui est ma propriété constructeur de compréhension est utilisé pour déterminer si un objet particulier est créé ou construit par lequel le constructeur fonctionnel. – Apurv

+0

related: [Existe-t-il un bon cas d'utilisation de la propriété constructeur en Javascript?] (Http://stackoverflow.com/questions/8073867/is-there-a-good-use-case-for-the-constructor-property -en-javascript), bien que les réponses ne sont pas utiles – Bergi

+0

voir aussi: [Pourquoi est-il nécessaire de définir le constructeur de prototype?] (http://stackoverflow.com/q/8453887/1048572) – Bergi

Répondre

2

Je ne vois vraiment pas pourquoi la constructor propriété est ce qu'elle est dans JS. Je me retrouve à l'occasion de l'utiliser pour obtenir des prototypes d'objets (comme l'objet de l'événement) dans IE < 9. Cependant, je pense qu'il est là pour permettre à certains ppl pour imiter les constructions classiques de programmation orientée objet:

function Foo() 
{ 
    this.name = 'Foo'; 
} 
function Bar() 
{ 
    this.name = 'Bar'; 
} 
function Foobar(){}; 
Foo.prototype = new Foobar; 
Foo.prototype.constructor = Foo; 
Bar.prototype = new Foobar; 
Bar.prototype.constructor = Bar; 
var foo = new Foo(); 
var bar = new Bar(); 
//so far the set-up 
function pseudoOverload(obj) 
{ 
    if (!(obj instanceof Foobar)) 
    { 
     throw new Error 'I only take subclasses of Foobar'; 
    } 
    if (obj.constructor.name === 'Foo') 
    { 
     return new obj.constructor;//reference to constructor is quite handy 
    } 
    //do stuff with Bar instance 
} 

Alors AFAIK , les « avantages » de la propriété du constructeur sont:

  • instancier de nouveaux objets d'exemple facilement
  • pouvoir groupe vos objets comme étant des sous-classes d'une certa en classe, mais toujours en mesure de vérifier quel type particulier de sous-classe vous avez affaire.
  • Comme vous le dites: être bien rangé.
0

Ce qui est ma propriété constructeur de compréhension est utilisé pour déterminer si un objet particulier est créé ou construit par lequel le constructeur fonctionnel.

Ceci est un excellent exemple pour le même: http://www.klauskomenda.com/code/javascript-inheritance-by-example/

+0

Cet article n'utilise pas Propriété 'constructor' du tout. Vous pouvez lire http://joost.zeekat.nl/constructors-considered-mildly-confusing.html pour comprendre ce que je demande :-) – Bergi

+0

Désolé je veux dire prototype..mon mauvais :) – Apurv