您的位置:首页 > 移动开发

JavaScript中call、apply、bind函数的用法

2016-11-21 16:32 603 查看
javascript中call、apply、bind这三个方法的作用都是改变执行环境中this指针的指向。

call()与apply()

这两个方法第一个参数都为this指针指向的目标对象,它们的区别是第二个参数开始传参方式不同。

call传参:obj,arg2,arg3

apply传参:obj,[arg2,arg3,…]

function foo(a,b){
return this.value + a + b;
}
var obj = {
value: 1
}

//call
foo.call(obj,2,3); //6

//apply
foo.apply(obj,[2,3]); //6

//call()与apply()如果第一个参数不是对象类型,那么这个参数会被自动转化为对象类型
function foo2(){
console.log(Object.prototype.toString.call(this));
}
foo2.call(2); //[object Number]


bind()

第一个参数为this指针指向的目标对象,bind方法执行后返回的是一个新函数

function foo3(){
console.log(this.name);
}
var obj3 = {
name: '张三'
}
var f = foo3.bind(obj3);
f(); // 张三

//在f这个新的函数对象中,this被永久绑定到了bind的第一个参数上面,无论后期这个新的函数被如何使用this都不会改变。
var obj4 = {
name: '李四',
f:f
}
obj4.f(); // 张三


call()与apply()与bind()

如果这个三个方法都没有提供第一个参数或参数是this、null、undefined中的一种,那么都将默认第一个参数为Global对象 。

function foo3(){
console.log(Object.prototype.toString.call(this));
}
foo3.call();      //[object Window]
foo3.apply();     //[object Window]
foo3.bind();      //[object Window]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript call apply bind this