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

来源:8-5 实现继承的方式

定定

2015-06-16 19:24

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

写回答 关注

3回答

  • 炒饭来张口
    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构造函数的方法和属性了,达不到想要的目的。

JavaScript深入浅出

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

281102 学习 · 1020 问题

查看课程

相似问题