javascript - bind.apply()这种用法具体怎么执行的?
本文介绍了javascript - bind.apply()这种用法具体怎么执行的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
function add (a, b) {
return a + b;
}
var make_lazy = function (fn) {
return fn.bind.apply(fn, arguments); //??? 不理解这一行
};
var lazy_value = make_lazy(add, 2, 3);
lazy_value() // => 5
apply() call() bind()的基础用法,我明白。但是bind.apply()这样连用,就有点含混了。
大侠可否将那一行拆解开,讲解下,具体怎样一步步起作用的?
解决方案
apply/call/bind都为函数对象的方法,
apply/call用于调用执行指定的函数,第1个参数执行函数执行时的上下文
bind方法为指定的函数对象创建一个新的函数,传入的第1个参数这个新函数执行时的上下文
bind方法可以理解为对apply方法的封装调用
var make_lazy = function (fn) {
return fn.bind.apply(fn, arguments); //??? 不理解这一行
};
1.fn.bind获取传入的函数对象的bind方法,和Function.prototype.bind
等价
2.调用apply方法,将fn作为bind方法调用时的函数对象(也即bind方法调用时的this对象)
3.bind方法从第2个参数开始可以传入多个参数,所以使用make_lazy方法调用时传入全部参数arguments做为apply方法的第2个参数,arguments中的第1个参数为fn
var make_lazy = function (fn) {
var orgBindFun=Function.prototype.bind;
return orgBindFun.apply(fn, arguments);
//return fn.bind(fn, arguments0, arguments1, arguments2....);//类似这样,将参数拆开
};
这篇关于javascript - bind.apply()这种用法具体怎么执行的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文