zoukankan      html  css  js  c++  java
  • call apply bind的区别

    Js中call apply bind三者的区别

    在说区别之前还是先总结一下三者的相似之处:

    1. 都是用来改变函数的this对象的指向的
    2. 第一个参数都是this要指向的对象
    3. 都可以利用后续参数传参
    let xiaowang = {
        name:'小王',
        gender:'男',
        age:22,
        say:function(){
            console.log('姓名:' + this.name + ' 性别: ' + this.gender + '年龄:' + this.age)
        }
    }
    let xiaohong = {
        name:'小红',
        gender:'女',
        age:22
    }
    xiaowang.say()
    

    这段代码没什么好说的,打印结果一定是姓名:小王 性别:男 年龄:22
    那么如何用xiaowangsay方法来显示xiaohong数据呢
    这里就可以用到callapplybind三个方法了,在此也可以了解到它们三者之间的区别

    call方法:

    xiaowang.say.call(xiaohong)
    

    apply方法:

    xiaowang.say.apply(xiaohong)
    

    bing方法:

    xiaowang.say.bind(xiaohong)()
    

    callapplybind的区别就是bind返回的是一个函数,我们还需要在执行一次
    callapply的区别是什么呢,我们接下来吧代码改动一下:

    let xiaowang = {
        name:'小王',
        gender:'男',
        age:22,
        say:function(school,grade){
            console.log('姓名:' + this.name + ' 性别:' + this.gender + ' 年龄: ' + this.age + ' 在: ' + this.school + ' 上:' + this.grade)
        }
    }
    let xiaohong = {
        name:'小红',
        gender:'女',
        age:22
    }
    xiaowang.say()
    

    现在我们再来看callapply的区别:

    call方法:

    xiaowang.say.call(xiaohong,"实验小学","六年级")
    

    apply方法:

    xiaowang.say.bind(xiaohong,["实验小学","六年级"])
    

    看到他们俩的区别了吗?他们的第一个参数上面提到过了。call的后续参数是和say方法中一一对应的;而apply后续的参数是需要传一个数组,数组里面的值才是要和say方法中一一对应的。

    bind方法:

    上面说过了bind返回的是一个函数我们还需要在调用一次,那么我们可以这样来传参

    xiaowang.say.bind(xiaohong,"实验小学","六年级")
    

    也可以这样,在调用的时候传参

    xiaowang.say.bind(xiaohong)("实验小学","六年级")
    

    Over!

  • 相关阅读:
    单元测试大揭密
    浅析C#中 ConcurrentDictionary的实现
    C#中 ??、 ?、 ?: 、?.、?[ ]
    队列-exchange
    matlab绘制一个点
    Ubuntu install of ROS Melodic
    matlab绘制树
    matlab scatter3函数
    多个QDockWidget用程序控制自动tab切换
    基于IFC数据的施工吊装模拟
  • 原文地址:https://www.cnblogs.com/kaizhadiyishuai/p/12389729.html
Copyright © 2011-2022 走看看