People.call(this,name,age)换成this=new Person(name,age)有区别吗?
Person.call(this,name,age); 其中的Person是指视频中的构造函数:
function Person(name,age){
this.name = name;
this.age = age;
}
Person.call(this,name,age);其中的call是指Function.prototype.call(),其中的this在其上下文中指向Student对象。
因此,Person.call(this,name,age);是调用Person构造函数,并把Person构造函数中的this替换为传入的this参数所代表的Student对象,因此Student对象便继承了name和age两个属性。
Person.call(this,name,age);这一句是让Student继承了Person中属性,并没有影响this指针。
而this=new Person(name,age);这一句将改变this指针的值使其变为Person类型的对象。因此通过Student构造器返回的对象为this是一个Person类型的对象。后面对Student.prototype所做的设置应该对返回的Person类型的对象不起作用。