慕用3558376
2017-10-31 22:41
new一个对象和object.create(xx.prototype)有什么区别?student里为什么要用person.call?
老师用的是组合继承,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的所有属性。
不过这样写的缺点在于,构造函数继承时执行了一遍父类的构造函数,实现子类原型继承的类氏继承时又调用了一遍父类构造函数。
我的理解是,new一个对象和create新建一个对象是一样的。
new的用法是ES3的用法,object.create是ES5的用法。而且new的问题在于遇到需要传参数的话,不传有可能会报错(暂时还没证明)??不过老师说的是会显得很奇怪。
student用的是东西是person都有的所以直接用call引用person就好了省了自己重复写同样的东西了,用apply也可以。(我自己是上述这么理解的,既然student能用person实现一部分功能,为什么还要再写一遍呐)
JavaScript深入浅出
281112 学习 · 1020 问题
相似问题