二者详解
apply
- 语法:
functionObject.apply( [ thisObj [, argsArray ]] )
- 解释:
apply()函数用于调用当前函数functionObject,并可同时使用指定对象thisObj作为本次函数执行时函数内部的this指针引用。
该函数属于Function对象,所有主流浏览器均支持该函数。 - 参数描述:
参数 | 描述 |
---|
thisObj | 可选/Object类型指定执行functionObject函数时,函数内部this指针引用的对象。 |
argsArray | 可选/Array或是argumens对象 |
- 返回值
apply()方法的返回值为任意类型,其返回值取决于当前functionObject对象的返回值。
call
- 语法:
functionObject.call( [ thisObj [, arg1 [, arg2 [, args...]]]] )
与apply不同之处在于:call是将Function对象的参数一个个分别传入,apply是以一个数组/arguments对象传入。 - 解释:
call()函数用于调用当前函数functionObject,并可同时使用指定对象thisObj作为本次执行时functionObject函数内部的this指针引用。
该函数属于Function对象,所有主流浏览器均支持该函数。 - 参数描述:
参数 | 描述 |
---|
thisObj | 可选/Object类型指定执行functionObject函数时,函数内部this指针引用的对象。 |
arg1…args | 可选/任意类型 |
- 返回值
call()方法的返回值为任意类型,其返回值取决于当前functionObject对象的返回值。
示例&说明
var name = "yww";
var age = 20;
function test(){
document.writeln(this);
document.writeln(this.name);
document.writeln(this.age);
};
test();
var wkx={
name:'wkx',
age:20
};
test.apply(wkx);
test.call(wkx);
function Student(major,grade){
this.major=major;
this.grade=grade;
};
function wkx(major,grade,habit){
Student.apply(this,arguments);
this.habit=habit;
}
function yww(major,grade,habit){
Student.call(this,major,grade);
this.habit=habit;
}
var xx=new wkx('cs','junior','study');
var yy=new yww('cs','junior','eat&sleep');
document.writeln(xx.major+'\n'+xx.grade+'\n'+xx.habit);
document.writeln(yy.major+'\n'+yy.grade+'\n'+yy.habit);
参考文献1-apply、call、bind
参考文献2-apply
参考文献3-call