深度理解JavaScript中的call,apply和bind

首先他们三个的作用都是重新定义this的指向,具体用法上有些许不同

我在这篇中用到call来解释this的指向问题,当时的疏漏,没有过多的解释call的作用及用法
谈谈JavaScript中的thisicon-default.png?t=N7T8https://blog.csdn.net/m0_56825253/article/details/123491133?spm=1001.2014.3001.5502

我们先来看个例子

var age = 12
var Obj = {
    name:'张三',
    intruction: function(){
        console.log(`我是${this.name},今年${this.age}岁`)
    }
}
Obj.intruction()
// 输出的结果为  我是张三,今年undefined岁

这里的this指向Obj,而Obj中没有age,所以值为undefined

下面,我们分别使用call,apply和bind来改变this的指向

var age = 12
var Obj = {
   name:'张三',
   intruction: function(){
         console.log(`我是${this.name},今年${this.age}岁`)
   }
}

var jakeObj = {
    name:'jake',
    age:22
}

Obj.intruction.call(jakeObj)
Obj.intruction.apply(jakeObj)
Obj.intruction.bind(jakeObj)()

// 通过这里我们发现,这三个都可以改变this的指向,只不过是bind返回的是一个函数,需要调用才能生效

当然,也可以给这三个方法传参数,我们通过下面的例子来解释

var age = 12
var name = 'outername'
var Obj = {
    name:'张三',
    intruction: function(from,to){
         console.log(`我是${this.name},今年${this.age}岁,来自${from},去往${to}`)
    }
}
        
var jakeObj = {
    name:'jake',
    age:22
}
Obj.intruction.call(jakeObj,'东土大唐','西天取经')
Obj.intruction.apply(jakeObj,['东土大唐','西天取经'])
Obj.intruction.bind(jakeObj,'东土大唐','西天取经')()
// 输出结果 我是jake,今年22岁,来自东土大唐,去往西天取经
// 这三者中,其中只有apply通过数组传参


Obj.intruction.bind(jakeObj,['东土大唐','西天取经'])
// 输出结果 我是jake,今年22岁,来自东土大唐,西天取经,去往undefined
// 从这里我们可以看出,参数不限定是string,可以是各种类型
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值