javascript:默认情况下,始终将函数中的第n个参数作为固定值传递
该函数接受3个参数,如javascript:默认情况下,始终将函数中的第n个参数作为固定值传递,javascript,lodash,Javascript,Lodash,该函数接受3个参数,如 function p(x,y,z){ console.log(arguments); } 所以当我们把它叫做 p(12,21,32) 第四个论点应该通过,比如说56 因此实际上,调用应该是p(12,21,32,56) 如何做到这一点 条件我们无法更改函数定义。我需要将第四个论点部分绑定为 p=p.bind(这个,,,,,,56); 或者使用lodash 然后再打电话给p p(12,21,32) 默认情况下56应该通过 p = (function() { var
function p(x,y,z){
console.log(arguments);
}
所以当我们把它叫做
p(12,21,32)
第四个论点应该通过,比如说56
因此实际上,调用应该是p(12,21,32,56)
如何做到这一点
条件我们无法更改函数定义。我需要将第四个论点部分绑定为
p=p.bind(这个,,,,,,56);
或者使用lodash
然后再打电话给p
p(12,21,32)
默认情况下56应该通过
p = (function() {
var old_p = p;
return function(a, b, c) {
return old_p(a, b, c, 56);
};
})();
我们记得p
的旧版本,名称为old\u p
,因此即使在重新定义p
之后,我们也可以调用它。我们在生活中这样做是为了old\u p
不会污染全球范围。然后,我们返回一个函数(分配给p
),该函数返回调用带有额外参数的old\u p
的结果
我们可以让它更通用,创建“绑定”函数,为任何函数调用添加额外的参数。下面我使用ES6语法,尤其是spread…
运算符。但是,您可以通过操作参数
对象并使用应用
来完成相同的任务:
function bind_with_arguments_at_end(f, ...extra_args) {
return function(...args) {
return f(...args, ...extra_args);
}
}
如果所涉及的函数是对象上的一个方法,则“传递”该函数是有意义的,因此可以将新函数称为this.bound\u func
,这样事情就会继续工作。要执行此操作,我们可以使用调用:
function bind_with_arguments_at_end(f, ...extra_args) {
return function(...args) {
return f.call(this, ...args, ...extra_args);
^^^^^^^^^^^
}
}
创建原始文件的副本并重写名称,然后使用新参数调用原始文件
功能p(a、b、c、d){
log(参数);
}
(功能(){
var org_p=p;//复制原件
p=函数(){//重写p
var args=[].slice.call(参数);//将参数转入数组
args.push(56);//添加第四个参数
返回org_p.apply(this,args);//使用更新的参数调用原始参数。
}
}());
p(1,2,3)代码>您可以使用创建一个新函数,将参数附加到原始函数的末尾:
功能p(a、b、c)
{
警报([].join.call(参数“,”);
}
p=uu0.5(p,56);
p(1,2,3);//1,2,3,56
您可以创建一个新函数,该函数用于将其参数重定向到原始参数,但用于覆盖其中一些参数:
函数fixArguments(f,args){
返回函数(){
返回f.apply(this,Object.assign([].slice.call(arguments),args));
};
}
p=fixArguments(p,{3:56});//用56覆盖第4个参数
函数fixArguments(f,args){
返回函数(){
返回f.apply(this,Object.assign([].slice.call(arguments),args));
};
}
函数p(x,y,z){
log(参数);
}
p=固定参数(p,{3:56});
p(12,21,32)
您总是可以用4个参数定义函数,调用方法时是否传递第四个参数取决于您。@epascarello这就是我要找的:)但是当我需要添加56作为第七个参数(比如)时,普通javascript闭包更好。我们能用任何现成的lodash函数做到这一点吗?很好的解决方案和使用lodash是可以的,但是这里错过了一些关于高阶函数等的教学机会;p=p(,,,,,,,,56);p(1,2,3);这将适用于以下情况:)thanks@Jack太好了,谢谢:)就像把args附加到某个东西上的奇怪方式一样。