"a.call.apply(a.bind, arguments)" 是什么意思?
What does "a.call.apply(a.bind, arguments)" mean?
出于好奇,我想用这种特殊方法制作一个有界函数:
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, arguments) 到底做了什么?
如果你有这样的功能:
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);
}
出于好奇,我想用这种特殊方法制作一个有界函数:
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, arguments) 到底做了什么?
如果你有这样的功能:
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);
}