问答详情
源自:8-1 概念与继承

继承的一些问题

People.call(this,name,age)换成this=new Person(name,age)有区别吗?

提问者:qq_放飞心情_0 2016-08-06 15:50

个回答

  • 慧眼识天下
    2016-08-06 21:41:15

    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两个属性。

  • 慧眼识天下
    2016-08-06 16:27:47

    Person.call(this,name,age);这一句是让Student继承了Person中属性,并没有影响this指针。

    而this=new Person(name,age);这一句将改变this指针的值使其变为Person类型的对象。因此通过Student构造器返回的对象为this是一个Person类型的对象。后面对Student.prototype所做的设置应该对返回的Person类型的对象不起作用。