有沒有辦法做任何功能的輸出時它是由地方(即,不修改實際功能本身)註冊全局鉤子被稱爲的console.log陳述或通過其他手段?添加的console.log各功能自動
71
A
回答
52
下面就來增強與您所選擇的功能全局命名空間中的所有功能的方式:
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
之後創建的功能將有額外的行爲。
+0
它是否正確處理函數的返回值? – SunnyShah 2012-10-15 19:02:21
-2
實際上,您可以將自己的函數附加到所有加載的console.log中。
console.log = function(msg) {
// Add whatever you want here
alert(msg);
}
-1
這裏有一些Javascript代替console.log給Javascript中的每個函數;用它玩上Regex101:
$re = "/function (.+)\\(.*\\)\\s*\\{/m";
$str = "function example(){}";
$subst = "$& console.log(\"$1()\");";
$result = preg_replace($re, $subst, $str);
這是一個「快速和骯髒的劈」,但我覺得它對於調試非常有用。如果你有很多功能,要小心,因爲這會增加很多代碼。此外,正則表達式很簡單,可能無法用於更復雜的函數名稱/聲明。
1
如果您想要更有針對性的日誌記錄,以下代碼將記錄特定對象的函數調用。您甚至可以修改對象原型,以便所有新實例也可以進行日誌記錄。我使用Object.getOwnPropertyNames而不是for ... in,所以它可以與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. 添加的console.log自動每一個功能 - 第2部分
- 2. 的console.log(I)的功能
- 3. 的console.log的javascript [功能]
- 4. Wix:動態添加功能
- 5. 自動加載功能
- 6. 爲動態添加的輸入標記添加自動完成功能
- 7. 添加滾動功能與UI自動完成
- 8. 自動完成功能無法動態添加文本框
- 9. 爲jquery動態添加類的功能
- 10. 自動增加公共部分一類的功能,而不明確地將這些各功能
- 11. 將自動完成功能添加到Bootstrap中的Wide Searchbar 3
- 12. 爲PowerShell中的開關添加自動完成功能
- 13. 使iPhone Web App的「添加到主頁」功能自動化
- 14. 以自動完成功能的形式添加行中斷
- 15. 添加類屬性自從tep_image功能
- 16. 自定義功能添加在Excel 2013
- 17. 高效的自動加載功能
- 18. 全自動加CV-合格的功能
- 19. 添加將功能添加到現有自定義航點功能中的功能
- 20. 添加EventListener功能?
- 21. PHP添加功能
- 22. 添加功能Intl.NumberFormat
- 23. 添加Karaf功能
- 24. 添加類功能
- 25. ngTags在表單中添加自動完成功能並將其添加到db
- 26. 添加直播功能,動態添加元素的jQuery
- 27. AS3添加動畫片段槽功能
- 28. jQuery爲動態內容添加功能
- 29. jquery拖動與添加按鍵功能
- 30. 我如何添加動畫功能
優秀的問題,我很想知道這是否可能,但我敢肯定它不是...也許添加一個功能請求,它將被添加到您最喜歡的瀏覽器的js引擎中? :-) – Endophage 2011-02-17 21:13:40
完美的問題,我需要類似這樣的東西 – mjimcua 2015-02-19 10:46:48