oop上这节课有很多疑惑
new一个对象和object.create(xx.prototype)有什么区别?student里为什么要用person.call?
new一个对象和object.create(xx.prototype)有什么区别?student里为什么要用person.call?
2017-10-31
老师用的是组合继承,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的所有属性。
不过这样写的缺点在于,构造函数继承时执行了一遍父类的构造函数,实现子类原型继承的类氏继承时又调用了一遍父类构造函数。
举报