美文网首页
关于JavaScript中call,apply和bind的简述

关于JavaScript中call,apply和bind的简述

作者: 黄努努 | 来源:发表于2017-04-08 15:23 被阅读0次

    咳咳

    最反感什么长篇大论的文章,明明把握好精髓就可以掌握的东西,却要假装很高大上一样。

    var common = {
        name: 'common',
        sum: function () {
            return this.name + ':' +
            [].slice.call(arguments).reduce( (prev, next) => {
                return prev + next
            })
        }
    }
    
    common.sum(1, 2, 3, 4, 5)  // common:15
    

    以上这个家伙名字叫common,它有一个“机器”叫作sum,扔一堆东西进去这个机器就会“打包”好,还给属好名字,真是个好“机器”啊!
    现在有三个家伙,名字分别叫call,apply,bind。

    var c = new Call('call')
    var a = new Apply('apply')
    var b = new Bind('bind')
    
    function Call (name) {
        this.name = name
    }
    function Apply (name) {
        this.name = name
    } 
    function Bind (name) {
        this.name = name
    }
    

    这三个家伙羡慕嫉妒恨common,也想拥有这个好用的“机器”,可是common偏偏不给他们用。于是这些狡猾的家伙约定一起去“偷”common的“机器”。

    • call

    call跑得快,第一个得手。

    common.sum.call(c, 1, 2, 3, 4, 5)  // call:15
    
    • apply

    apply看了看call,心里想“call这个笨蛋,一个一个东西放进机器中,那100个岂不是要放100次?”
    于是它把所有的东西放在袋子里,再把袋子扔进机器了。

    common.sum.apply(a, [1, 2, 3, 4, 5])  // apply:15
    
    • bind

    bind看了楼上得意洋洋的两位,心想“这两个笨蛋,人与人是终究是不一样的”。
    于是它模仿着机器,造了一个高仿机器,下次要用的时候,就不用再来偷了。

    var sum = common.sum.bind(b, ...args)  // function () {}
    sum()  // bind:15
    

    最后,它们三个家伙因为偷东西,被回收了。。。

    相关文章

      网友评论

          本文标题:关于JavaScript中call,apply和bind的简述

          本文链接:https://www.haomeiwen.com/subject/vkifattx.html