2010-12-23 5 views
5

me he dado cuenta de este interesante problema:mantener el constructor correctamente después de la herencia

function a() { this.aprop = 1; } 
function b() { this.bprop = 2; } 
b.prototype = new a(); // b inherits from a 
var x = new b(); // create new object with the b constructor 
assert(x.constructor == b); // false 
assert(x.constructor == a); // true 

Por lo que yo sé, debería haber x.constructorb, pero en realidad es a cuando b hereda de a través de su prototipo? ¿Hay alguna manera de heredar a sin arruinar mi constructor?

Respuesta

3

Esto es porque b.prototype.constructor tiene asignada new a().constructor en la 3ra línea. Puede volver a cambiar esta propiedad en la siguiente línea:

function a() { this.aprop = 1; } 
function b() { this.bprop = 2; } 
b.prototype = new a(); // b inherits from a 
b.prototype.constructor = b; // <-- add this 
var x = new b(); // create new object with the b constructor 
assert(x.constructor == b); // false 
assert(x.constructor == a); // true 
+0

Thanks! ¿Sería posible y una buena idea para mí escribir una función 'rápida (destino, padre)' que haga esas dos líneas? –

+0

@Delan: seguro, eso sería posible. –

+0

Eso funciona perfectamente; gracias otra vez Andy. –

Cuestiones relacionadas