0
问题:为什么p1的构造函数出现为Person.Shouldn't它是人吗?什么应该是构造函数属性值..a原型构造函数或对象构造函数本身
function Person()
{
this.type='person'
}
function Man()
{
this.type='Man'
}
Man.prototype=new Person();
var p1=new Man();
console.log('p1\'s constructor is:'+p1.constructor);
console.log('p1 is instance of Man:'+(p1 instanceof Man));
console.log('p1 is instance of Person:'+(p1 instanceof Person));
嗯,你说原来的原型对象(ieMan.prototype)的原型链中被覆盖。但我们从bottom.So对象的(P1的)constructor属性,应首先检查开始这不会被覆盖。为什么我们甚至会去检查原型的构造器属性(如果它存在于对象本身中的话)? – hariom
@kaioken:'p1'对象没有自己的'.constructor'属性。或者至少你的问题中的代码不分配一个。它从原型链获得其'.constructor'属性。由于您为'Man'覆盖了原始原型对象,并且没有手动重新分配'.constructor'属性,因此它会继续沿着链向新的Man.prototype对象的原型对象,即Person.prototype ',它仍然有它的原始'.constructor'属性。如果那个被删除,它会继续下去,直到找到一个*(或没有)*。 – 2012-06-01 14:06:21