javascript - Prototype inheritance is not working as expected -


since javascript childhood have read , followed should override constructor in case of prototypical inheritance. surprised see following example outputs same @ console if overriding constructor statement commented. please enlighten.

function a() {     console.info("a constructor"); }  function b() {     console.info("b constructor"); }  b.prototype = a.prototype; b.prototype.constructor = b; // need statement?  console.info("cp 1"); var b = new b(); console.info("cp 2"); 

before getting constructor part, there problem in code. making both b.prototype , a.prototype same, doing

b.prototype = a.prototype; 

this means that, cannot identify parent of objects constructed these functions. try this

console.log(new b() instanceof a, new b() instanceof b); // true true 

this expected, since b created b , b created a's prototype. but

console.log(new a() instanceof a, new a() instanceof b); // true true 

whaaat? how come object of a instance of b? because, since made b.prototype same a.prototype, when object a tries find out if prototype (a.prototype prototype of object created a) exists anywhere in prototype chain of b. since b.prototype same a.prototype, object of a can treated object of b.

the right way is,

b.prototype = object.create(a.prototype); 

now, making b's prototype object created prototype of a. so, not a'prototype, object created based on prototype of a.


now, if don't do

b.prototype.constructor = b; 

try printing constructor property of object created b, without line

console.log((new b()).constructor); // [function: a] 

since b's prototype still has constructor value copied a's prototype, still refers function a. why replace b function object.


Comments

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

[C++][SFML 2.2] Strange Performance Issues - Moving Mouse Lowers CPU Usage -

ios - Possible to get UIButton sizeThatFits to work? -