很多人写js的时候都碰到过这样的一种情况
当你使用ajax请求等异步操作,或者执行其他方法回调的时候,this这个指针指向的作用域对象已经变了
很多人为了避免这个问题都会在这些方法外部申明一个变量去承接这个this,然后在里面就可以使用这个变量继续操作
实际上如果执行这些回调的时候执行方法能获取你执行方法的this,那么回调函数执行的时候,作用域还可以是原来的,这就需要用到标题上所说的apply或者call了。
apply和call在功能上是一致的,唯一的区别只是在传回参数的时候参数传递形式不同
//apply在传回参数的时候除了表示作用域的context外,只有一个额外的数组会传回去,所有的参数写在数组里
var arg1="a",arg2="b";
function1.apply(context,[arg1,arg2]);
//数据接收形式为这样
context.function1=function(arg1,arg2){
console.log(arg1+"-"+arg2);
}
//使用call
function1.call(context,arg1,arg2);
但是我更倾向于使用apply
function a(a,b){
}
//apply在使用的时候可以使用arguments,对于不知道具体参数的情况,会方便很多
function b(arg1,arg2){
a.apply(a,arguments);
}
网友评论