日期:2014-05-16  浏览次数:20365 次

原型被重置后的构造函数问题
function A( ){ }
A.prototype={
m:10,
n:20
}
var aa=new A( );
alert(aa.constructor==Object);
alert(aa instanceof Object);
alert(aa.constructor==A);
alert(aa instanceof A);

问题很简单,第3个和第4个alert,为何结果不同???

------解决方案--------------------
构造函数实例的constructor是从prototype中继承而来的
也就是说你重写了A.prototype,A.prototype就没有constructor这个属性
所以自然A的实例的原型也没有该属性了,除非你手动给他添加上这个属性
A实例中的constructor是从原型链中的顶层(也就是Object)那里找到的,即:Object.prototype.constructor=Object;