通俗解释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绑定了一个默认的对象,还有前面的参数。再次的调用的时候,参数自动再扩充。
直接上例子:
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绑定了一个默认的对象,还有前面的参数。再次的调用的时候,参数自动再扩充。
相关文章推荐
- JavaScript 中的 this, call, apply, bind...
- javascript中的作用域 (apply、call、.bind)
- javascript中apply、call和bind的区别
- JavaScript的this,call(),apply(),bind()
- Javascript中的this,call,apply,bind!
- JQuery_JavaScript___call、apply、arguments的使用解释
- JavaScript之apply,call以及bind方法
- JavaScript的this,call(),apply(),bind()
- javascript中call,apply,bind的用法对比分析
- Javascript中的this,call,apply,bind!
- JavaScript 上下文环境和作用域,以及 call、apply 和 bind【转载+翻译+整理】
- JavaScript apply、call、caller、callee、bind使用方法与区别分析
- Javascript中的Bind,Call和Apply
- Javascript中的Bind 、Call和Apply
- javascript中的作用域 (apply、call、.bind)
- JavaScript方法call,apply,caller,callee,bind的使用详解及区别
- JavaScript的this,call(),apply(),bind() ---(转载)
- Javascript中call,apply,bind三个函数的用法
- javascript中call,apply,bind的用法对比分析
- JavaScript方法call,apply,caller,callee,bind的使用详解及区别