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,为何结果不同???

解决方案 »

  1.   

    如果明白 prototype 与 constructor的关系,第三个的答案就好解释了
    1. 每个function 都有一个prototype
    2. prototype 会有一个 constructor 的属性
    3. constructor 是指向这个function的
    这三点都是默认情况下当改写A.prototype后,原来的这种关系就被破坏了,constructor就不在指向function A了,所以答案就是false了。
    可以参考: http://blog.csdn.net/lovexp2010/article/details/7248395楼下继续……
      

  2.   

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

  3.   

    因为原型链被重写了。
    aa 的原型链其实是另一个原型对象!所以aa 的constructor不是ALZ可以去看下《JS高级程序设计》里面第6章对象的讲解!