call和apply的区别-继承-筛选

callapply的方法和作用有些类似,

call()方法接受的是若干个参数的列表,
apply()方法接受的是一个包含多个参数的数组。

let arr = [num0,num1]
fun.call(this, num0, num1)
fun.apply(this, arr)

这里要注意的是
两个参数都不是必填的,第一个参数在函数中使用时,根据场景不同指向也不一样,当不填时默认指向的是window对象。


在继承方面区别

function father(name, age) {
  this.name = name;
  this.age= age;
}
function child1(name, age) {
  father.call(this, name, age);
  this.category = 'child1';
}
function child2(name, age) {
  father.apply(this, [name, age]);
  this.category = 'child2';
}
var first= new child1('one', 11);
var second= new child2('two', 22);
console.log(first.category ,first.name,first.age) // child1,one,11
console.log(second.category ,second.name,second.age) //child2,two,22

继承方面两者用法几乎一致,唯一的区别就是传参的时候,call是参数队列,apply是数组


apply的实用妙招

1.筛选组中的最大值或最小值

let arr = [7,3,6,9,4,2,10,5]
let max = '' ,  min = ''
//通常我们想到的是遍历for循环
for (var i = 0; i < arr .length; i++) {
  if (arr [i] > max)
    max = arr [i];
  if (arr [i] < min) 
    min = arr [i];
}
//或者将数组用sort排序截取收尾
max = arr.sort((a,b)=>a-b).pop()
min = arr.sort((a,b)=>a-b).unshift()  //正常还是slice截取就好
//其实我们也可以用apply的方式
var max = Math.max.apply(null, numbers); 
var min = Math.min.apply(null, numbers);

2.函数传参
项目中我们经常遇到接口返回的函数是数组,我们函数里需要的是单独的参数队列,这时候我们可能会想着把数组的值取出来再传参
其实就可以直接用apply的继承特性,fun.apply(this,[ddd,fff,fff])

function do(name, age,love) {
 if(name=='mi'){
 	return '1111111'
 }else if(age=='12'){
 	return '222222'
 }else if(love == 'love'){
 	return '3333'
 }else{
	return 'nonon'
}
}
//接口返回参数是['li','12','like']
//我们还得想办法拆分出来,再传到函数里,用apply就好了
do.apply(null,['li','12','like'])
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值