bind,apply,call三者的区别

bind,apply,call三者的区别

apply方法

apply接收两个参数,第一个参数是this的指向,第二个参数是函数接收的参数,以数组的方式传入。
示例:

回调函数绑定this指向:

var name="张三";
var obj={
 name:"李四",
 fun:function(time,addr){
 console.log(this.name+" is "+time+" born from "+addr);
 }
};
var fun=obj.fun;
setTimeout(function(){
 fun.apply(obj,["1995","中国"])
} ,0); //李四 is 1995 born from 中国,this改变指向了obj
fun("1996","中国") //张三is 1996 born from 中国,this指向window,说明apply只是临时改变一次this指向
call方法

和apply方法类似,也是临时改变一次this指向,第一个参数也是this指向,后面传的参数跟apply有所不同,apply传的是数组,call方法传的是参数列表。

var name="张三";
var obj={
 name:"李四",
 fun:function(time,addr){
 console.log(this.name+" is "+time+" born from "+addr);
 }
};
var fun=obj.fun;
setTimeout(function(){
 fun.call(obj,"1995","中国")
} ,0); //李四 is 1995 born from 中国,this改变指向了obj
fun("1996","中国") //张三 is 1996 born from 中国,this指向window,说明call只是临时改变一次this指向
bind方法

第一个参数也是this指向,后面传的参数跟call方法一样传的是参数列表。
bind方法返回的是一个修改过后的函数。

var a = {
    user:"张三",
    fn:function(){
        console.log(this.user);
    }
}
var b = a.fn;
var c = b.bind(a);
console.log(c); //function() { [native code] }这时候打印不出来user的 ,打印出来是个函数

调用函数c试试呢

var a = {
    user:"张三",
    fn:function(a,b,c){
        console.log(this.user);
        console.log(a,b,c);
    }
}
var b = a.fn;
var c = b.bind(a,10,11,12);
console.log(c); //function() { [native code] }这时候打印不出来user的 ,打印出来是个函数
console.log(c()); //function() 这时候可以看看打印出来没有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值