本帖最后由 zhengshuanger 于 2010-07-24 17:52:08 编辑

解决方案 »

  1.   

    LZ在哪里测的,我测试的结果为
    man.constructor === Man // return false, why???man.constructor === Person // return true, why???man.constructor === Object //  return false, why???
    FF3.6 下的firebug
      

  2.   

    1 Man是构造函数,它的prototype是Person构造出来的对象,不是Person本身
    2 man的constructor是Person,是因为new的内部行为
    Man.prototype = new Person() ==Man.prototype={constructor:Person}
    man.constructor === Man // return falseman.constructor === Person // return true
    man.constructor === Object //  return false
      

  3.   

    Man.prototype = new Person(); //  将Man的原型指向Person的一个实例
    // 因为Person的实例可以调用Person原型中的方法, 所以Man的实例也可以调用Person原型中的所有属性。
      

  4.   

    function Person(){ }function Man(){ }Man.prototype = new Person(); // 这里为什么不用 Man.prototype = Person.prototype; ????var man = new Man();alert(man.constructor == Man.prototype.constructor)
    alert(Man.prototype.constructor == Person)
    alert(man.constructor == Person)
      

  5.   

    Man.prototype = new Person();
    Man 继承了 Person 要把 constructor 指向回自己的,不然自己的constructor 就没有了
      

  6.   

    上海找工作,求职招聘,免费发布求职招聘信息
    请登陆网站http://www.5158h.com上海求职住宿http://www.5158h.com
      

  7.   

    Man.prototype = new Person(); // 这里为什么不用 Man.prototype = Person.prototype; ????
    因为如果Man.prototype = Person.prototype了,那么这两个类就指向同一个原型链了,
    Man.prototype.newFunction = ... 这样扩种后,父类Person也会增加这个方法,这是我们不想看到的情况,new一个父类的对象则不会出现这种问题。