어쨌든 전역 훅을 어딘가에 (즉, 실제 함수 자체를 수정하지 않고) 등록하거나 다른 수단을 통해 호출 할 때 어떤 함수 출력을 console.log 문으로 만들 수 있습니까? ?모든 함수에 console.log를 자동으로 추가하기
답변
여기 당신의 선택의 기능과 글로벌 네임 스페이스의 모든 기능을 확대하는 방법 :
function augment(withFn) {
var name, fn;
for (name in window) {
fn = window[name];
if (typeof fn === 'function') {
window[name] = (function(name, fn) {
var args = arguments;
return function() {
withFn.apply(this, args);
return fn.apply(this, arguments);
}
})(name, fn);
}
}
}
augment(function(name, fn) {
console.log("calling " + name);
});
하나 다운면이 augment
를 호출 한 후 생성 된 어떤 기능이 추가 행동이없는 것입니다.
함수의 반환 값을 적절하게 처리합니까? – SunnyShah
@SunnyShah 그렇지 않습니다. http://jsfiddle.net/Shawn/WnJQ5/하지만이 작업은 http://jsfiddle.net/Shawn/WnJQ5/1/에서 작동합니다. 모든 경우 ... 차이점은'fn.apply (this, arguments);를'fn.apply (this, arguments);를 반환하기 위해 변경하는 것 ' – Shawn
@Shawn @SunnyShah Fixed. 가장 안쪽 함수에'return '을 추가하기 만하면됩니다. –
로드하는 모든 것을 실제로 console.log에 연결할 수 있습니다.
console.log = function(msg) {
// Add whatever you want here
alert(msg);
}
내 downvote에 대해 설명해야합니까? – vladkras
정확도는 100 %입니다. –
다음은 Javascript의 모든 기능에 console.log를 추가하는 일부 Javascript입니다. Regex101에 함께 재생 :
$re = "/function (.+)\\(.*\\)\\s*\\{/m";
$str = "function example(){}";
$subst = "$& console.log(\"$1()\");";
$result = preg_replace($re, $subst, $str);
그것은 '신속하고 더러운 해킹'이다하지만 디버깅에 유용 찾을 수 있습니다. 많은 기능을 가지고 있다면 많은 코드가 추가 될 것이기 때문에 조심하십시오. 또한 RegEx는 단순하며 더 복잡한 함수 이름/선언에 대해서는 작동하지 않을 수 있습니다.
보다 자세한 대상 로깅을 원하면 다음 코드는 특정 개체에 대한 함수 호출을 기록합니다. Object Prototype을 수정하여 새로운 인스턴스가 모두 로깅되도록 할 수도 있습니다. for ... 대신 Object.getOwnPropertyNames를 사용 했으므로 열거 형 메서드가없는 ECMAScript 클래스 6에서 작동합니다.
function inject(obj, beforeFn) {
for (let propName of Object.getOwnPropertyNames(obj)) {
let prop = obj[propName];
if (Object.prototype.toString.call(prop) === '[object Function]') {
obj[propName] = (function(fnName) {
return function() {
beforeFn.call(this, fnName, arguments);
return prop.apply(this, arguments);
}
})(propName);
}
}
}
function logFnCall(name, args) {
let s = name + '(';
for (let i = 0; i < args.length; i++) {
if (i > 0)
s += ', ';
s += String(args[i]);
}
s += ')';
console.log(s);
}
inject(Foo.prototype, logFnCall);
- 1. mysql_real_escape_string을 regexp와 함께 자동으로 추가하기
- 2. C# Console.log를 주석으로 처리하는 정규 표현식
- 3. Django에서는 모든 함수에 대해 어떻게 이것을 작성합니까?
- 4. 자동으로 생성 된 메뉴 항목에 슬롯 추가하기
- 5. grails의 모든 뷰에 변수 추가하기
- 6. 모든 테이블 헤더에 클래스 추가하기
- 7. 모든 함수에 대한 return 문
- 8. 클래스의 모든 메소드에 불변 수표 추가하기
- 9. 루비에서 이전 버전과의 호환성을 유지하면서 함수에 새 args 추가하기
- 10. 자동으로 모든 href 값을 설정하십시오.
- 11. 모든 JSP에 자동으로 JSP를 포함하십시오.
- 12. jquery를 사용하여 모든 행에 열 추가하기
- 13. 모든 ASP.NET MVC HTTP 응답에 "charset"추가하기
- 14. 윈도우를 제외한 모든 것에 빌드 플래그 추가하기
- 15. 간단한 방법으로 자바 스크립트로 모든 필드 추가하기
- 16. 모든 HTML 태그에 숫자 속성 추가하기
- 17. 클래스 내의 모든 함수에 데코레이터 부착하기
- 18. C++의 파생 함수에 코드를 자동으로 추가하는 방법
- 19. 서브 버전의 소스 파일에 리뷰어 이름을 자동으로 추가하기
- 20. JQuery에서 추가하기 전에 DOM 요소가 자동으로 존재하는지 확인하십시오.
- 21. javascript/jquery에서 인스턴스 변수를 객체 함수에 자동으로 자동 연결 하시겠습니까?
- 22. C++ 프로젝트에 파이썬 스크립트 추가하기
- 23. 페이지의 모든 게시물에 대해 자동으로 업데이트되는 모든 jquery 플러그인
- 24. VFP 보고서의 모든 입력란을 자동으로 플로팅 하시겠습니까?
- 25. T4에서 모든 어셈블리 참조 자동으로 받기
- 26. 루비의 모든 HTTP 연결에 프록시를 자동으로 추가합니다.
- 27. 모든 종속 DLL 파일을 자동으로 내보내는 방법
- 28. 왜 Rhino.ServiceBus가 자동으로 모든 대기열을 생성하지 않습니까?
- 29. 모든 장치가 팀 프로비저닝 프로파일에 자동으로 추가됩니까?
- 30. 모든 클래스를 개별 파일에 자동으로 저장
훌륭한 질문이지만 이것이 가능한지 알고 싶습니다.하지만 실제로는 그렇지 않을 것이라고 확신합니다 ... 아마도 좋아하는 브라우저의 js 엔진에 기능 요청을 추가 할 수 있습니다. ? :-) – Endophage
완벽한 질문, 나는 이와 비슷한 것이 필요할 것이다 – mjimcua