Para realizar una imagen clara:
En la cadena única
obj->"new B()"->"new A()" // where obj is the same as "new C()"
"new A()"
objeto tiene propiedad constructor
. Todos los demás objetos obtienen la propiedad constructor
de la cadena del prototipo.
En el código:
var A = function(){
}
A.prototype.name="A";
// A had not create "constructor" property for "new A()"
// so, looking at the prototype
// According to ECMAScript spec 13.2.10
// A.prototype.constructor == A
// thus
// "new A()".constructor == A
var B = function(){
}
B.prototype = new A();
B.prototype.name="B";
// B had not create "constructor" property for "new B()"
// looking at the prototype
// B.prototype is "new A()"
// as shown above
// "new A()".constructor == A
// thus
// B.prototype.constructor == A
// and at the end
// "new B()".constructor == A
var C = function(){
}
C.prototype = new B();
C.prototype.name="C";
// C had not create "constructor" property for "new C()"/"obj"
// looking at the prototype
// C.prototype is "new B()"
// looking up to "new B()".prototype
// "new B()".prototype is "new A()" as shown above
// "new A()".constructor == A
// and finally
// C.prototype.constructor == A
obj = new C();
print(obj.name);
print(obj.constructor.prototype.name);
print(obj.constructor == A);
Así como escribió mellamokb debemos sobreescribir (crear, si más precisa) constructor
propiedad.
La propiedad del constructor se define en el objeto prototipo, y cuando la asigne, se asignan todos sus miembros. Cualquier miembro que desee tener valores diferentes debe estar definido, o heredará el constructor, toString, valueOF y cualquier otra cosa que contenga el prototipo. – kennebec
Gracias, me di cuenta de esto ya – nahab