JavaScript 中 call()、apply()、bind() 的用法

JavaScript 中 call()、apply()、bind() 的用法

   var name = "小芳", age = "18"
    var obj = {
        name: "聪聪",
        objage: this.age,
        myFun: function () {
        	return this
            console.log(this.name + "年龄" + this.age)
        }
        }
    console.log(obj.objage) // 18
    obj.myFun() // 聪聪年龄undefined

由上可以得出,console的this指向是obj,所以,this.age为undefined。
再看下边代码

 var name = "小马"
    function  show() {
        console.log(this.name + "年龄18")
    }
    show() // 小马年龄18

从这一点可以看出this的指向的window。
今天所总结的是call(),apply(),bind();他们三者都能改变this的指向问题,我们来看看。

 var obj = {
      name: "聪聪",
      age: "18",
      myFun: function () {
          console.log(this.name + "年龄" + this.age)
      }
      }
 var replaceObj = {
 	name: "小芳",
 	age: "20"
 } 
	obj.myFun.apply(replaceObj) // 小芳年龄20
	obj.myFun.call(replaceObj) // 小芳年龄20
	obj.myFun.bind(replaceObj)() //小芳年龄20

上边要注意的是bind()返回的是一个函数,需要在后边重新调用一下才可以执行。

那么如果传参接收参数怎么办呢?接着看。

var obj = {
        name: "聪聪",
        age: "18",
        myFun: function (o, t) {
            console.log(this.name + "年龄" + this.age + "性别" + o + "身高" + t)
        }
    }
    var replaceObj = {
        name: "小芳",
        age: "20"
    }
    obj.myFun.call(replaceObj, "女", "170" ) // 小芳年龄20性别女身高170
    obj.myFun.bind(replaceObj, "女", "170" )() // 小芳年龄20性别女身高170
    obj.myFun.apply(replaceObj, ["女", "170"] ) // 小芳年龄20性别女身高170
    obj.myFun.apply(replaceObj, "女", "170") // 小芳年龄20性别女身高170 // 报错
    obj.myFun.call(replaceObj, ["女", "170"] ) //小芳年龄20性别女,170身高undefined
    obj.myFun.bind(replaceObj, ["女", "170"] )() // ceshi.html:253 小芳年龄20性别女,170身高undefined

有上面我们可以得出结论,当传参的时候,call() 所传的是string类型bind()返回的是一个函数,要想查看是需要调用函数的,所以要加上(),重新调用一下,**bind()使用的时候是需要传数组格式,**才能够拼接出来想要的结果,其他两个方法如果想要使用数组的时候,将会把数组内的内容当成一个参数进行渲染和拼接。

以上内容分别有借鉴和学习,并非抄袭。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值