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

咳咳

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

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

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

推荐阅读更多精彩内容