call,apply,bind三种方法:
call方法使用的语法规则:
函数名称.call(obj,arg1,arg2...argN);
参数说明:
obj:函数内this要指向的对象
arg1,arg2...argN :参数列表,参数与参数之间使用一个逗号隔开
例子:
<script>
var lisi = {names:'lisi'};
var zs = {names:'zhangsan'};
function f(age){
console.log(this.names);
console.log(age);
}
f(23); //undefined this指向window默认值为undefined
f.call(zs,32); //zhangsan将f函数中的this固定在zs对象中
</script>
apply方法使用的语法规则:
参数说明:
obj:函数内this要指向的对象
[arg1,arg2...argN] : 参数列表,但是要求格式为数组
例子:
<script>
var lisi = {name:'lisi'};
var zs = {name:'zhangsan'};
function f(age,sex){
console.log(this.name+age+sex);
}
f.apply(zs,[23,'nan']);
</script>
bind方法使用的语法规则:
bind方法用于将创建一个新的函数,且将新函数中的this绑定到具体的某个对象
<script>
function foo() {
console.log(this.a);
}
var obj2 = {
a: 2,
};
// 创建新函数,并将新函数中的this固定的指向obj2对象;
var new_foo = foo.bind(obj2);
new_foo(); //2
foo(); //undefined
</script>
相同点:
call,apply,bind 第一个参数都是 this 指向的对象:
不同点::
1、call 和 apply 如果第一个参数指向 null 或 undefined 时,那么 this 会指向 windows 对象。:
2、call,apply 都是改变上下文中的 this,并且是立即执行的。bind 方法可以让对应的函数想什么时候调用就什么时候调用。