使用 javascript .bind() 方法跳过参数

2023-12-08

在 JavaScript 中,我可以将参数绑定到函数,如下所示。

function foo(arg1, arg2) { console.log(arguments); }
foo = foo.bind(this, 'bar');

当调用时,我们得到这个输出......

foo('baz');
> { '0': 'bar', '1': 'baz' }

是否可以跳过 .bind() 函数中的参数来实现以下输出?

function foo(arg1, arg2, arg3, arg4) { console.log(arguments); }
foo = foo.bind(this, 'bar', null, 'qux');
foo('baz', 'lel');
> { '0': 'bar', '1': 'baz', '2': 'lel', '3': 'qux' }

看看Underscore的_.partial:

通过填充任意数量的参数来部分应用函数,而不更改其动态 this 值。您可以在参数列表中传递 _ 来指定不应预先填充的参数,但应保持打开状态以在调用时提供。

在你的情况下:

function foo(arg1, arg2, arg3, arg4) { console.log(arguments); }
foo = _.partial(foo, 'bar', _, 'qux');
foo('baz', 'lel');
> { '0': 'bar', '1': 'baz', '3': 'qux', '4': 'lel'}

是的,我知道这并不完全是你所说的你想要的。你似乎想要both论点被压缩在哪里_是。除了明确指定在调用时填充两个参数之外,没有什么好的方法可以解决这个问题:

foo = _.partial(foo, 'bar', _, _, 'qux');

我不一定建议您使用它,但至少您可以看一下他们的代码并获得一些提示。

如果你想要预先确定的参数总是出现在最后,比如'qux',您将需要一些额外的机械。例如,这里有一个小例程(使用 ES6,但您可以适应),它将函数转换为指定参数放置在参数列表末尾的函数:

function partialEnd(fn, ...predefinedArgs) {
  return function() {
    return fn.apply(this, [...arguments, ...predefinedArgs]);
  };
}

你可以这样使用它:

function foo(a, b, c) { console.log(a + b + c); }
foo = partialEnd(foo, 3);
foo(1, 2) // outputs 6

你可以将其与_.partial using _占位符以获得一些参数插入到参数列表中,而其他参数始终放置在末尾的效果:

function foo(arg1, arg2, arg3, arg4) { console.log(arguments); }
foo = _.partial(foo, 'bar', _, _);
foo = partialEnd(foo, 'lel');

foo('baz', 'lel');
> { '0': 'bar', '1': 'baz', '3': 'lel', '4': 'qux'}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 javascript .bind() 方法跳过参数 的相关文章

随机推荐