js apply() 用法

一、改变 this 指向

var person = { 
  fullName: function() {
  return  this.firstName + ' ' + this.lastName
  }
}

var people = {
  firstName: "Wang",
  lastName: "Mingming"
}

var theName = person.fullName.apply(people);
console.log( theName ); // Wang Mingming

this 原本是谁调用指向谁,在 person 对象中,本来是指向 person 的,但是 person 中并没有firstName 和 lastName 变量。 apply 将 this 指向了 people ,所以能够获取到 people 内的变量值给 person 使用。

call() 同理。

接下来是是我个人理解,可能有误!!!!

上方代码理解起来等同于这样,但实际应该不是这样

var person = { 
  firstName: "Wang",
  lastName: "Mingming",
  fullName: function() {
  return  this.firstName + ' ' + this.lastName
  }
}

var theName = person.fullName();
console.log( theName ); // Wang Mingming

二、将数组入参变为一般入参

此作用是 apply() 与 call() 最大的区别

apply() 第二个参数接收的是数组,call() 不是

apply() 使用场景:

当一个函数入参是非数组,但你拥有的是一个数组,你不想先处理完数组再进行入参操作,就可以用apply 解决。

Math.max(1,2,3)//3
Math.max([1,2,3])//报错
Math.max.apply(null,[1,2,3])//3

需要注意的是这里的第一个值为null时,

在 “JavaScript 严格模式”下则它将成为被调用函数的所有者(对象)也就是没改变指向在“非严格”模式下,它成为全局对象。

apply()  具体使用

var person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + "," + city + "," + country;
  }
}
var people = {
  firstName:"Wang",
  lastName: "Mingming"
}
person.fullName.apply(people, ["长沙", "中国"]); //Wang Mingming,长沙,中国

call() 具体使用 

var person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + "," + city + "," + country;
  }
}
var people = {
  firstName:"Wang",
  lastName: "Mingming"
}
person.fullName.call(people, "长沙", "中国"); //Wang Mingming,长沙,中国

扩展:其实使用 ... 解构也能达到效果

Math.max(...[1,2,3]) //3

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值