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

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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值