详解call()和apply()方法

call和apply是什么

call 和 apply 在日常开发中经常用到,他们的作用都是改变this的指向,或者说是借用方法。

形式:
func.call(thisArg,param1,param2…)
func.apply(thisArg,[param1,param2…])

参数:
thisArg(可选):
func的this将指向thisArg;非严格模式下若thisArg指定为null或是undefined,则func的this指向window对象。严格模式下若thisArg指定为nul1或是undefined,则func的this指向undefined;
param(可选):如果不传该参数或是传入null或undefined,则表示不传入任何参数;apply的第二个参数为类数组对象,传入func的参数是数组内各项的值;

call和apply本质上来说并没有什么区别,作用都是一致的,它们的差别体现在传入给func的参数不同,call是多次传入要使用的参数,而apply传入的是一个包含要使用参数的类数组。

通俗解释:
function.apply(obj,args)方法能接收两个参数
obj:这个对象将代替function类里this对象
args:这个是数组,它将作为参数传给function

1、apply、call示例

let obj = {
	name: '小王',
	sayName: function() {
		console.log(this);
		console.log(this.name);
	}
}
let obj2 = {
	name: '小张',
	age: 22
}

obj.sayName.apply(obj2); // {name: "小张", age: 22};小张
obj.sayName.call(obj2); // {name: "小张", age: 22};小张

改变了obj内部this 的指向,指向了obj2,所以打印的this.name是obj2中定义的name:小张

2、apply实现求数组最大值原理

定义一个数组
arr = [2, 4, 5, 8, 9, 4, 3, 1];

Math.max.apply(null, arr); // 9

因为Math.max 参数里面不支持Math.max([param1,param2]) 也就是数组

但是它支持Math.max(param1,param2,param3…),所以可以根据刚才apply的那个特点来解决 var max=Math.max.apply(null,array),这样轻易的可以得到一个数组中最大的一项

apply会将一个数组转换为一个参数接一个参数的传递给方法

这块在调用的时候第一个参数给了一个null,这个是因为没有对象去调用这个方法,我只需要用这个方法帮我运算,得到返回的结果就行,.所以直接传递了一个null过去
参考链接

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值