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

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解  js中call()和apply()的使用与区别,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

 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))

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

 call()方法的使用:

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

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

从上面可以看出,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

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

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()

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

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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之家整理,本文链接:https://www.bmabk.com/index.php/post/149793.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之家——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!