问答详情
源自:8-2 再谈原型链

oop上这节课有很多疑惑

new一个对象和object.create(xx.prototype)有什么区别?student里为什么要用person.call?

提问者:慕用3558376 2017-10-31 22:41

个回答

  • 慕粉1823356920
    2018-01-22 23:02:43

    老师用的是组合继承,Person是父类,Student是子类,在student里用person.call(this,参数),是构造函数式继承的精髓,由于call方法可以更改函数的作用环境,相当于此时student继承了person的所有属性。student.prototype=object.creat(person.prototype);

    student.prototype.constructor=student;

    我认为这两句话是类氏继承,作用等于student.prototype=new person();就是说实例化父类创建一个新的对象,这个对象的__proro__指向父类.prototype,这样就拥有父类的所有属性,然后把这个对象赋值给student的原型对象,这样student就继承了person的所有属性。

    不过这样写的缺点在于,构造函数继承时执行了一遍父类的构造函数,实现子类原型继承的类氏继承时又调用了一遍父类构造函数。

  • David_LSQ
    2017-11-01 21:20:42

    我的理解是,new一个对象和create新建一个对象是一样的。

    new的用法是ES3的用法,object.create是ES5的用法。而且new的问题在于遇到需要传参数的话,不传有可能会报错(暂时还没证明)??不过老师说的是会显得很奇怪。

    student用的是东西是person都有的所以直接用call引用person就好了省了自己重复写同样的东西了,用apply也可以。(我自己是上述这么理解的,既然student能用person实现一部分功能,为什么还要再写一遍呐)