只是出于好奇,我想用这种特殊的方法做一个有界函数:
var fn = function(a, b, c) {
return a.call.apply(a.bind, arguments)
}
var boundFn = function(a, b, c) {
fn.apply(null, arguments)
}
function unboundedFn() {
console.log(this, arguments)
}
var boundedFn = boundFn(unboundedFn, x, y);
所以我试图了解a.call.apply(a.bind,参数)到底做了什么?
如果你有这样的函数:
function unboundedFn() {
console.log(this, arguments)
}
您可以使用unboundedFn.call(thisObj, arg1, arg2)
或unboundedFn.apply(thisObj, [arg1, arg2])
来运行它,但更改this
内部的含义。call
和apply
都做同样的事情,唯一的区别是传递论点的方式。
call
、apply
和bind
都是方法,你可以运行例如unboundedFn.call.call.call.call.apply.apply.apply.apply()
,但它似乎没有多大意义。
在你的例子中,return a.call.apply(a.bind, arguments)
等于return a.bind.call(...arguments)
,等于a.bind(...arguments.slice(1))
,所以整个fn函数可以简化为:
function fn(a,b,...args){
return a.bind(b, ...args);
}