【JavaScript】将一个方法的所有参数传到下一个方法步骤详解

如题,将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以上才支持

都看到这了,还不点赞…
请添加图片描述

猜你喜欢

转载自blog.csdn.net/zs1028/article/details/132580714