Object.create的实现方法不是很理解,F函数的左右是不是相当于把Student.prototype赋值为proto?老师能把这个和1、2方法区别一下吗?
return new F 和 new F() 有区别吗
有些父类需要传递参数,用return new F那种只需要调用一次父类构造函数,new的话会调用2次。详情请参考javascript高级程序设计第三版的6.3.6寄生组合式继承
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构造函数的方法和属性了,达不到想要的目的。