问答详情
源自:8-5 实现继承的方式

Object.create的实现方法里面return new F和new Person()有什么区别?

Object.create的实现方法不是很理解,F函数的左右是不是相当于把Student.prototype赋值为proto?老师能把这个和1、2方法区别一下吗?

提问者:定定 2015-06-16 19:24

个回答

  • 炒饭来张口
    2021-01-28 00:09:39

    return new F 和 new F() 有区别吗

  • Aleks
    2015-07-21 17:39:36

    有些父类需要传递参数,用return new F那种只需要调用一次父类构造函数,new的话会调用2次。详情请参考javascript高级程序设计第三版的6.3.6寄生组合式继承

  • weibo_RP攒积中_0
    2015-06-19 02:03:48

    1、Object.create是创建一个空对象({}),空对象的原型指向传递进来的参数(Person.prototype),

          在这个例子当中就是,Student.prototype属性值是空对象,空对象的_proto_等于Person.prototype(空对象相当于是Person的实例,但是又不继承Person构造函数的属性),

          即Student.prototype._proto_=Person.prototype,

          这样Student的实例可以通过原型链访问Person.prototype的方法,但又不继承Person构造函数的方法和属性,可以在Student的构造函数中通过Person.call(this,'name','age')的方法对初始属性赋值;   

    2、第二种方法先创建一个空的构造函数F,F.prototype=proto(即传进来的参数Person.prototype),那么这时候创建的F的实例,就相当于可以访问Person.prototype的方法,但又不继承Person构造函数的方法和属性,同Object.create是同样的效果。

    如果是new Person()的话,那么就拥有Person构造函数的方法和属性了,达不到想要的目的。