如题,将JavaScript的一个方法所有参数传到下一个方法,这个步骤怎么实现,在码代码搬砖,要重写方法的时候,就有可能会用到它,在这里给各位讲一下。
参数传递
也许你会这样写,看以下代码
var _log = console.log;
console.log = function(a,b) {
if(b) return _log(a,b);
return _log(a);
};
但是,遇到方法参数数量很多的话,看以下代码
var _log = console.log;
console.log = function(a,b,c,d,e,f,g...) {
//省略更多....
if(b && c) return _log(a,b,c);
if(b) return _log(a,b);
return _log(a);
};
是不是要写很多行呢,如果还不变通,那样写就会很累很累的…深有体会
arguments
也许,你接触过arguments
,应该会想到用这个吧,来看能不能实现,
arguments
就是参数列表数组,可以知道传入的参数有多少,arguments.length
表示传入的参数数量
看以下代码,知道用arguments
这样也不好,虽然省了写if()
判断,但是看着还是要写很多,
var _log = console.log;
console.log = function() {
switch(arguments.length){
//省略更多....
case 3:
return _log(arguments[0],arguments[1],arguments[2]);
case 2:
return _log(arguments[0],arguments[1]);
default:
return _log(arguments[0]);
}
};
代理方法
听说过代理,于是想起,方法是否可以代理呢,答案是可以的,
看一个例子,代理apply
的用法,代码如下
var _log = console.log;
console.log = function() {
return _log.apply(this, arguments);
};
方法
apply
用不好就会劫持
,引发数据安全问题,还容易被检测到,不建议用
直接传参
将一个方法的参数列表传到下一个方法中,就直接传参,
看一个例子,...args
的用处体现出来了,代码如下
var _log = console.log;
console.log = function(...args) {
return _log(...args);
};
...args
是spread运算符,注意这用法在ECMAScript ES6以上才支持
都看到这了,还不点赞…