通俗解释javascript中的call, apply, bind

call, apple, bind三个函数我找了网上的中文资料,基本没有解释的比较清楚的,英文的看的就豁然开朗了。


直接上例子:

var cat = Cat()

console.log.call(cat, "hello", "world");

这里可以理解成 cat.console.log("hello", "world");,换成通用形式来看func.call(object, arguments)  ---> object.func(arguments)。

说白了,就是把函数func的对象改成第一个参数的object,把函数func的参数改成后面的arguments。


apply基本和call一样,唯一的区别就是后面的arguments必须是数组,也就是必须要在"hello", "world"加上中括号。

var cat = Cat()

console.log.call(cat, ["hello", "world"])


bind原理一样的,只是call和apply都只是临时的改变func的对象和参数,或者说是调用一次就完了,但是bind是直接绑定上去,供以后使用。

分两步来看:

第一步:console.log.bind(cat, "hello")

这里其实就是把cat和"hello"先绑定到函数console.log上面去。以后调用console.log的时候,默认对象就是cat, 初始的参数就是"hello"。


第二步:console.log.bind(cat, "hello")("world")

刚刚已经给console.log绑定好了对象和初始的参数,现在就可以调用了。可以理解为console.log(cat, "hello", "world")。

也就是说,bind给console.log绑定了一个默认的对象,还有前面的参数。再次的调用的时候,参数自动再扩充。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值