js中call()和apply()的使用与区别

 apply()方法的使用:

    //call apply
    function sum (num1,num1){
        return num1+num1
    }
    function callSum1(num1,num2){
        console.log(arguments) 
        return sum.apply(this,arguments) //传参方式一:传入arguments对象
    }
    function callSum2(num1,num2){
        return sum.apply(this,[num1,num2]) //传参方式二:传入参数数组
    }
    console.log(callSum1(10,10))
    console.log(callSum2(10,10))

  

 call()方法的使用:

    function callSum (num1,num2){
        return sum.call(this,num1,num2)
    }
    console.log(callSum(10,10))

从上面可以看出,apply和call在使用上主要是调用函数时传入的参数不同。作用是一样的~

apply和call方法的第一个参数都是和this

  • apply传参方式

传参方式一:传入arguments对象

传参方式二:传入数组

  • call传参方式

传参方式一:将参数一个一个均列出来

apply()和call()真正强大的地方并不是给函数传参,而是控制函数调用上下文即函数体内this值的能力~~如下~~

    window.color = 'red'
    let obj = {
        color:'blue'
    }
    function sayColor(){
        console.log(this.color)
    }
    sayColor() //全局调用函数,this指向window
    sayColor.call(this) //this指向window
    sayColor.call(window) //this指向window
    sayColor.call(obj) //改变了this指向,指向对象obj

sayColor.call(obj)把函数的执行上下文即this切换为对象obj之后,结果就成了blue

使用call()或apply()的好处是将任意对象设置为任意函数的作用域,这样对象可以不用关心方法

ES5处于同样的目的推出了一个新方法:bind()   bind()方法会创建一个新的函数实例,其this值会被绑定到传给bind()的对象上

    window.color = 'red'
    let obj = {
        color:'blue'
    }
    function sayColor(){
        console.log(this.color)
    }
    let objSayColor = sayColor.bind(obj)
    objSayColor()

 这里在sayColor()上调用bind()并传入对象obj,创建了一个新函数objSayColor (),objSayColor ()中的this值被设置为obj,因此直接调用这个函数,即使是在全局作用域中调用,也会返回字符串blue。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suoh's Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值