2012-09-27 98 views
6

En JavaScript, el objeto prototipo de cada función tiene una propiedad no enumerable constructor que apunta a la función (EcmaScript §13.2). No se utiliza en cualquier funcionalidad nativa (por ejemplo, sólo instanceof comprueba la cadena de prototipo), sin embargo, are encouraged to adjust it al sobrescribir la propiedad prototype de una función para la herencia:¿Para qué se usa realmente la propiedad `constructor`?

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

Pero, ¿verdad (incluido yo) hacer que sólo para la claridad y la pulcritud? ¿Hay casos de uso en el mundo real que se basan en el constructor property?

+0

Cuál es mi propiedad de constructor de comprensión se utiliza para ver si un objeto particular es creado o construido por qué constructor funcional. – Apurv

+0

relacionado: [¿Hay un buen caso de uso para la propiedad del constructor en Javascript?] (Http://stackoverflow.com/questions/8073867/is-there-a-good-use-case-for-the-constructor-property -in-javascript), aunque las respuestas no son útiles – Bergi

+0

vea también: [¿Por qué es necesario configurar el prototipo de constructor?] (http://stackoverflow.com/q/8453887/1048572) – Bergi

Respuesta

2

no puedo ver realmente por qué la propiedad constructor es lo que es en JS. de vez en cuando me encuentro con él para conseguir a los prototipos de objetos (como el objeto de evento) en IE < 9. Sin embargo yo creo que está ahí para permitir que algunos PPL para imitar clásicas construcciones de programación orientado a objetos:

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 
} 
Así

yo sepa , las "ventajas" de la propiedad constructor son:

  • crear instancias de nuevos objetos de instancia fácil
  • poder grupo sus objetos como son subclases de una certa en clase, pero aún así poder verificar con qué tipo de subclase se trata.
  • Como dices: ser ordenado.
0

Cuál es mi propiedad de constructor de comprensión se utiliza para ver si un objeto particular es creado o construido por qué constructor funcional.

Este es un gran ejemplo para el mismo: http://www.klauskomenda.com/code/javascript-inheritance-by-example/

+0

Ese artículo no usa el 'constructor' propiedad en absoluto. Es posible que desee leer http://joost.zeekat.nl/constructors-considered-mildly-confusing.html para comprender lo que estoy pidiendo :-) – Bergi

+0

Lo siento, quiero decir prototipo..mi mal :) – Apurv

Cuestiones relacionadas