call(),apply(),bind()的区别

call(),apply(),bind()都是用来重定义this的!

1.
var name = "小红",age=18;
var obj={
	name:"小蓝",
	objAge:this.age, //这里的this指向window
	myMess:function(){console.log(this.name+this.age);}//这里的this指向obj
	}

obj.objAge; //18
obj.myMess(); //小蓝 undefined
2.
var name="小绿";
function show(){
	console.log(this.name);
	} 
show(); //小绿
  1. 三者的调用上的区别:
var name = "小红",age=18;
var obj={
	name:"小蓝",
	objAge:this.age, 
	myMess:function(){console.log(this.name+this.age);}
	}
var person={
 name:"小粉",
 age:12
 }
 obj.myMess.call(person);//小粉12
 obj.myMess.apply(person);//小粉12
 obj.myMess.bind(person)();//小粉12

只有bind方法后面多了一个(),因为bind返回的是一个新的函数,必须调用它才可以被执行。

  1. 三者传递参数的区别
var name = "小红",age=18;
var obj={
	name:"小蓝",
	objAge:this.age, 
	myMess:function(a,b){console.log(this.name+this.age+"第一个参数"+a+"第二个参数"+b);}
	}
var person={
 name:"小粉",
 age:12
 }
 obj.myMess.call(person,1,2);     // 小粉12 第一个参数1第二个参数2
obj.myMess.apply(person,[1,2]);      // 小粉12 第一个参数1第二个参数2 
obj.myMess.bind(person,1,2)();       // 小粉12 第一个参数1第二个参数2
obj.myMess.bind(person,[1,2])();   //小粉12 第一个参数1,2第二个参数undefined

call、apply、bind这三个函数的第一个参数都是this的指向对象。

call:参数是直接放进去,第二个第三个以及n个都是用逗号分隔,直接放到后面。语法:Function.call(obj,[param1[,param2[,…[,paramN]]]])

apply:所有的参数必须放在一个数组里传进去。语法:Function.apply(obj,args)
call 和 apply 仅仅只是接受参数的方式不同

bind:bind()方法会创建一个新函数,称为绑定函数.当调用这个绑定函数时,绑定函数会以创建它时传入bind方法的第一个参数作为this,传入bind方法的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值