JS中的call,aply,bind

本文详细解析JavaScript中call、apply与bind方法的作用及区别,教你如何灵活改变函数内部this指向,掌握函数调用与参数传递的艺术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

call :调用函数,改变函数的this指向
第一个参数设置函数内部this的指向
其他参数对应函数的参数
call的返回值就是函数的返回值
如下:
将一个对象的方法应用到另一个对象

var obj = {
	sum:function(a,b){
		return a+b;
	}
}	
var jbj = {
	a:12,
	b:14
}

此时如果我想计算jbj对象的两个属性之和,但又不想在写代码这时候就可以直接应用obj的方法

var res = obj.sum.call(jbj,jbj.a,jbj.b);
console.log(res);

结果输出26

2.apply 调用函数,改变this
第一个参数设置函数内部this的指向
第二个参数传递数组的话会将数组中的每一项返回给apply前面的方法
如求数组的最大值我们可以借助Math.max

var arr = [1,2,3];
var res = Math.max.apply(arr,arr);
console.log(res);//返回3

3.bind 改变this的指向
bind也可以改变this的指向,不同的是bind不会调用方法,而是复制对象方法

var obj {
	name:'zs',
	fun:function(){
	   setInterval(function(){
	   console.log(this.name)//此时不会打印name值
	  // 因为此时this指向的是定时器的函数,定时器里面的函数没有name
	   //我们需使其指向obj即可
	   }.bind(this),2000)
	}
}

call、apply、bind总结

相同点
都可以改变函数内部this指向
区别

  1. call和apply会调用函数,并且改变函数内部指向,但是call传递参数是arg1,arg2而apply必须是数组形式[arg,arg]
  2. bind不会调用函数,可以直接改变函数内部this指向
  3. call经常用作继承
  4. apply经常与数组有关系,如借助Math对象实现数组最大值最小值
  5. bind不调用函数,但是还想改变this指向,如改变定时器内部this指向
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值