제목에서와 같이 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.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]);
}
};
프록시 방법
Proxy라는 얘기를 듣고, 그 방법이 Proxy가 될 수 있을까?라고 생각했는데, 대답은 '그렇다'였습니다.
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
스프레드 연산자입니다. 이 사용법은 ECMAScript ES6 이상에서만 지원됩니다.
이거 본적은 있는데 별로 안좋아함...