Question

just ran into this little confusion while playing around with javascript inheritance.

 function A() {}

 function B() {}
 B.prototype = new A();

 function C() {}
 C.prototype = new B();

 var x = new C();
 x.construction // -> returns A in chrome console.

I was expecting x.constructor to be C (or even B maybe) but not all the way to A (why even stop at A and not show Object then)

Was it helpful?

Solution

When you replace the prototype object entirely, the original constructor reference is removed with the original prototype object and is instead inherited from the new A(), etc.

function B() {}

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

B.prototype = new A();

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

So, you'll have to reset the constructor after setting the prototype:

function A() {}

function B() {}
B.prototype = new A();
B.prototype.constructor = B;

function C() {}
C.prototype = new B();
C.prototype.constructor = C;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top