首先在js中函数就是类同时也是类的构造函数也就是构造器函数。
那么call函数就是用来动态调用一个函数并且同时改变被调函数中this的指向,这种常见于js的OOP编程的继承中,如下面的示例:
定义一个人“类”并且执行人类的部分属性
function Person( name, gender ) {
this.name = name;
this.gender = gender;
}
当需要工人类的时候需要继承人类,那供人类和人类共同的特点是都有姓名和性别,此时就不需要重复为工人类定义姓名和性别属性只需要让
工人类继承人类则工人类就默认拥有了这两个属性,这里继承的时候就用到了call函数,如下:
function Worker( name, gender, job ) {
Person.call( this, name, gender );
this.job = job;
}
实例化工人类并且弹出工人类的名称:
var oW1 = new Worker('koma', 'm', 'phper');
alert( oW1.name ); //这里的结果是:koma
说明:
上面执行:Person.call( this, name, gender );的时候this是指向oW1的,那通过call方法来调用Person函数的时候call方法就动态的改变了
Person方法中this的指向,所以在Person方法中的this也是指向oW1的,所以这时就相当于给Worker中的this指定name和gender属性
这种方式就类似与OOP中的子类调用父类的构造方法,那在js中就称为:构造函数伪装