"a.call.apply(a.bind, arguments)"是什么意思?



只是出于好奇,我想用这种特殊的方法做一个有界函数:

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内部的含义。callapply都做同样的事情,唯一的区别是传递论点的方式。

callapplybind都是方法,你可以运行例如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);
}

最新更新