【发布时间】:2022-01-05 15:37:46
【问题描述】:
出于好奇,我想用这种特殊方法制作一个有界函数:
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) 究竟做了什么?
【问题讨论】:
-
这段代码是你写的还是你找到的?无论哪种方式都有缺陷 -
fn返回一个函数,但boundFn没有对它的返回值做任何事情。因此,代码是浪费 CPU 周期的一种非常过分的方式。 -
这是我想要理解的真实代码: kaa = function(a, b, c) { return a.call.apply(a.bind, arguments) } laa = function(a , b, c) { // } D = function(a, b, c) { Function.prototype.bind && -1 != Function.prototype.bind.toString().indexOf("native code") ? D = kaa : D = laa;返回 D.apply(null, arguments) };我从 youtube js 代码中得到它
-
a.call.apply(a.bind, arguments)是写a.bind(b, c)或a.bind(Array.from(arguments).slice(1))的繁琐方式(b和c从未使用过,因此请从参数列表中删除它们)。 -
@SebastianSimon 这很麻烦,但它是使用 ES5 进行可变参数调用的唯一方法。其余代码也遵循此规范。
标签: javascript apply call bind