关于JavaScript中call,apply和bind的简述
2017-04-08 本文已影响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
最后,它们三个家伙因为偷东西,被回收了。。。