js基础call和apply区别

call apply的作用都是改变this指向

call:call() 方法和apply() 方法作用相同, 区别在于接收参数的方式不同, call() 需要列举所有传入的所有参数。

function Person(name,age,sex){
    this.name=name;
    this.age=age;
    this.sex=sex;
}
function Student(name,age,sex,tel,grade){
    // var this={name:"",age:"",sex:""}
    //Student借用Person函数实现自己的功能(借助别人的方法实现自己的功能)
    // Person.call(this,name,age,sex);//指定this指向,第一个参数是改变this指向,需要列举所有传入的所有实参
    Person.apply(this,['name','age','sex']);//指定this指向,。第一个参数是改变this指向,将实参封装到一个数组中统一传递
    this.tel=tel;
    this.grade=grade;
}
var student=new Student("sunny",123,"female",18729407720,2021);
//call把实参按照形参个数传进去
console.log(student);

 call例子:

function sum(sum1, sum2) {
  return sum1 + sum2;
}
function sumCall1(sum1, sum2) {
    return sum.call(this, sum1, sum2); //列举传入的参数
}
console.log(sumCall1(10,20)); // 30

apply:apply()方法需要将实参封装到一个数组中统一传递(即使只有实参只有一个,也要放到数组中)。严格来说只接收argument对象和数组两种形式。

apply例子:

function sum(sum1, sum2) {
   return sum1 + sum2;
}
function sumApply1(sum1, sum2) {
    return sum.apply(this, arguments) // 传入arguments对象,this是改变指向
}
function sumApply2(sum1, sum2) {
    return sum.apply(this, [sum1, sum2]) // 传入数组
}
console.log(sumApply1(10,20)) // 30
console.log(sumApply2(10,20)) // 30

区别:

call(this, arg, arg1, arg2,…);
apply(this, [arg, arg1, arg2,…]);

call,apply的效果完全一样,它们的区别也在于:

  • 参数数量/顺序确定就用call,参数数量/顺序不确定的话就用apply。
  • 考虑可读性:参数数量不多就用call,参数数量比较多的话,把参数整合成数组,使用apply。
  • 参数集合已经是一个数组的情况,用apply,比如上文的获取数组最大值/最小值。
     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值