JavaScript中call()、apply()的使用

每个函数都包含两个非继承而来的方法:call()和apply(), 这两个方法是为了动态改变上下文,即改变this指向而出现的,
当一个object中没有某个方法,而其他对象的有,我们就可以借助call或apply用其它对象的方法来操作

1、不带参数的call()  

Function.call(obj) //不带参数

看一个例子,本例调用 person 的 fullName 方法,并用于 person1,他实现了通过 call()成功使用属于另一个对象的方法。

var person = {
    fullName: function() {
        return this.firstName + " " + this.lastName;
    }
}
var person1 = {
    firstName:"Bill",
    lastName: "Gates",
}
var person2 = {
    firstName:"Steve",
    lastName: "Jobs",
}
person.fullName.call(person1);  // 将返回 "Bill Gates"

2、带参数的call()

Function.call(obj,param1,param2,param3,....)

 看个例子,此例调用 person 的 fullName 方法,在 person1 上使用它

var person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + "," + city + "," + country;
  }
}
var person1 = {
  firstName:"Bill",
  lastName: "Gates"
}
person.fullName.call(person1, "Seattle", "USA");//返回 Bill Gates ,Seattle,USA

3、apply()
     apply方法和call方法,非常相似,不同之处在于call方法如果需要传参的话要一个一个的传
     如:call(this,参数1,参数2,参数3,参数4...)
     而apply()传的必须是个数组不然会报错 ,如: apply(this,[参数1,参数2,参数3,参数4...])
举个例子:和带参数的call()例子对比,可以清楚看到,参数形式的不同

var person = {
  fullName: function(city, country) {
    return this.firstName + " " + this.lastName + "," + city + "," + country;
  }
}
var person1 = {
  firstName:"John",
  lastName: "Doe"
}
person.fullName.apply(person1, ["Oslo", "Norway"]);

apply()也分带参和不带参两种情况,但与call是一样的,这里只列举带参情况

ps:学习过程的简单记录,如有不恰当之处,欢迎大佬指正!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值