क्या कोई फ़ंक्शन आउटपुट कंसोल.लॉग स्टेटमेंट बनाने का कोई तरीका है जब इसे किसी वैश्विक हुक को पंजीकृत करके कहा जाता है (यानी, वास्तविक फ़ंक्शन को संशोधित किए बिना) या किसी अन्य माध्यम से ?प्रत्येक फ़ंक्शन में स्वचालित रूप से 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 (यह, तर्क); 'to' fn.apply (यह, तर्क); ' – Shawn
@Shawn @SunnyShah फिक्स्ड। सबसे व्यस्त कार्य में 'वापसी' जोड़ने की आवश्यकता है। –
आप वास्तव में लोड होने वाली सभी चीज़ों के लिए console.log पर अपना स्वयं का फ़ंक्शन संलग्न कर सकते हैं।
console.log = function(msg) {
// Add whatever you want here
alert(msg);
}
क्या मुझे अपना डाउनवोट समझा देना है? – vladkras
यह 100% सही है –
यहां कुछ जावास्क्रिप्ट है जो जावास्क्रिप्ट में प्रत्येक फ़ंक्शन में console.log जोड़ता है; Regex101 पर इसके साथ खेलते हैं:
$re = "/function (.+)\\(.*\\)\\s*\\{/m";
$str = "function example(){}";
$subst = "$& console.log(\"$1()\");";
$result = preg_replace($re, $subst, $str);
यह एक 'त्वरित और गंदी हैक' है, लेकिन मैं इसे डिबगिंग के लिए उपयोगी पाते हैं। यदि आपके पास बहुत सारे फ़ंक्शन हैं, तो सावधान रहें क्योंकि इससे बहुत सारे कोड जोड़े जाएंगे। साथ ही, RegEx सरल है और शायद अधिक जटिल फ़ंक्शन नाम/घोषणा के लिए काम नहीं कर सकता है।
यदि आप अधिक लक्षित लॉगिंग चाहते हैं, तो निम्न कोड किसी विशेष ऑब्जेक्ट के लिए फ़ंक्शन कॉल लॉग करेगा। आप ऑब्जेक्ट प्रोटोटाइप को भी संशोधित कर सकते हैं ताकि सभी नए उदाहरण लॉगिंग भी हो सकें। मैंने इसके बजाय ऑब्जेक्ट.getOwnPropertyNames का उपयोग किया ... में, यह ईसीएमएस्क्रिप्ट 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. जेडएसएच: स्वचालित रूप से प्रत्येक सीडी
- 2. क्लोजर: नामस्थान में प्रत्येक फ़ंक्शन में डीबग ट्रेस जोड़ना?
- 3. गणित में स्वचालित रूप से फ़ंक्शन नाम कैसे उत्पन्न करें?
- 4. स्वचालित रूप से vim
- 5. क्या प्रत्येक एनएसटीएचड स्वचालित रूप से एक प्रेषण कतार है?
- 6. मित्र सदस्य फ़ंक्शन स्वचालित रूप से फ़ंक्शन टेम्पलेट के रूप में क्यों पहचाना नहीं जाता है?
- 7. स्क्रिप्ट स्वचालित रूप से
- 8. स्वचालित रूप से RSpec
- 9. शॉर्टकट स्वचालित रूप से
- 10. स्वचालित रूप से श्रृंखला में
- 11. जोड़ना उप-निर्देशिकाएं व्यक्तिगत रूप से मेरे plugins निर्देशिका में प्रत्येक उपनिर्देशिका specifing बजाय पथ
- 12. स्वचालित रूप से Minecraft
- 13. NH12ern85 स्वचालित रूप से
- 14. स्वचालित रूप से बेस व्यू
- 15. Resharper स्वचालित रूप से अर्धविराम
- 16. Gson स्वचालित रूप से classname
- 17. स्वचालित रूप से एक Django मॉडल में विकल्पों में से प्रत्येक के लिए स्थिरांक जोड़ने
- 18. बैकबोन.जेएस में HTTP बेसिक प्रमाणीकरण शीर्षलेख जोड़ना सिंक फ़ंक्शन सेव()
- 19. स्वचालित रूप से pathforResource
- 20. स्वचालित रूप से डाउनलोड
- 21. स्वचालित रूप से जावा
- 22. स्वचालित रूप से
- 23. स्वचालित रूप से व्यवस्थापक
- 24. स्वचालित रूप से
- 25. स्वचालित रूप से JTable
- 26. स्वचालित रूप से MongoDB
- 27. स्वचालित रूप से संग्रह
- 28. WebClient स्वचालित रूप से
- 29. स्वचालित रूप से
- 30. स्वचालित रूप से VisualVM
उत्कृष्ट प्रश्न, मुझे यह जानना अच्छा लगेगा कि यह संभव है या नहीं, लेकिन मुझे पूरा यकीन है कि यह नहीं है ... शायद अपने पसंदीदा ब्राउज़र के लिए जेएस इंजन में इसे जोड़ने के लिए एक फीचर अनुरोध जोड़ें ? :-) – Endophage
बिल्कुल सही सवाल, मुझे इस तरह की कुछ चाहिए – mjimcua