function Person(){}
function Son(){}
Son.prototype = new Person();
var son = new Son();
son.constructor.prototype //指向Person()构造函数
这个地方还是指向Person,我的理解因为Person的实例里面没有constructor属性指向Son构造函数,所以这个地方继续向原型找constructor,找到Person.prototype的constructor属性,指向Person构造函数。
但是son实例的构造函数是Son(){},照理说son.constructor.prototype应该是指向Son(){}构造函数的。
所以这个地方需要写明son是Son(){}的实例么?
还是说实例的constructor.ptototype并不一定需要指向实例自己的构造函数呢?
还是我的理解哪里有问题?
谢谢。
来看看开开心心做几道JavaScript机试题 - 01
继承的关键,在于一定要把Son
的构造器再手动置回去:
Son.prototype = new Person();
Son.prototype.constructor = Son;
prototype是prototype,constructor是constructor,不要混淆了。
首先,son.constructor指向了Son,Son.prototype又指向了Person实例。
你去多看看原型链是怎么回事就知道了。prototype
中有一个 constructor
属性,你直接把原型替换成了 new Person()
,也就重写了 constructor
,自然会发生你所说的情况。