您的位置:首页 > 移动开发

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

2014-09-12 02:05 387 查看
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绑定了一个默认的对象,还有前面的参数。再次的调用的时候,参数自动再扩充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息