JS中的call/apply/bind
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS中的call/apply/bind相关的知识,希望对你有一定的参考价值。
<script>
var obj = {
a:1
}
var a = 2;
function test(a)
{
alert(a);
alert(this.a);
}
</script>
1.test(3);
结果:"3"、"2";
解释:实参3传递给形参a,函数内部的形参a覆盖全局变量a,所以第一个为3,函数中this为window对象,所以this.a为2
2.test.call(thisObject,param1,param2...);
thisObject:更改test函数中this的指向;
param:为test函数传递参数,以字符串的形式
test.call(null);
结果:"undefined","2";
解释:test(a)执行时,并没有参数传递过来,a为undefined,由于传递thisObject是null,在执行test函数时,浏览器把thisObejct没有指向时,一律指向window对象,所以第二个弹出为2。同样的test.call(undefined);的结果同上;
3.test.call(null,3);
结果:"3","2";
4.test.call(obj);
结果:"undefined","1";
5.test.call(obj,3);
结果:"3","1";
6.test.apply(thisObject,[param1,param2....]);
除了给函数传递参数的形式是以数组,其他的和call(thisObject,param1,param2...);
7.test.bind(thisObject,param1,param2...)
thisObject:更改this指向
param:参数
这个方法返回this更改指向,且获得实参的函数对象
var ss = test.bind(null);
ss();
结果:"undefined","2"
var ss = test.bind(obj);
ss();
结果:"undefined","1";
var ss = test.bind(obj,3);
ss();
结果:"3","2";
当函数有多个参数时:
function test(a,b,c) { alert(a+":"+b+":"+c); } var ss = test.bind(obj,3); ss(4,5,6);
结果为:3,4,5却不是4,5,6;因为在bind的时候,就将3赋值给了a,在ss(4,5,6)时,6并未赋值给c;
arguments中保存的值为3,4,5,6;
以上是关于JS中的call/apply/bind的主要内容,如果未能解决你的问题,请参考以下文章