为了账号安全,请及时绑定邮箱和手机立即绑定

oop上这节课有很多疑惑

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

正在回答

2 回答

老师用的是组合继承,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的所有属性。

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

3 回复 有任何疑惑可以回复我~

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

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

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

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript深入浅出
  • 参与学习       281112    人
  • 解答问题       1020    个

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

进入课程

oop上这节课有很多疑惑

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信