मैं अपने लॉगिंग स्टेटमेंट को यथासंभव छोटा रखना चाहता था जबकि कंसोल को अस्तित्व में रखने से रोकने के दौरान; मैं निम्नलिखित समाधान के साथ आया था:किसी अन्य ऑब्जेक्ट (वेबकिट समस्या) पर console.log को असाइन करना
var _ = {};
if (console) {
_.log = console.debug;
} else {
_.log = function() { }
}
मेरे लिए, यह काफी सुंदर लगती है, और यह (लाइन नंबर कि console.debug
console.log
की तुलना में अधिक उपयोगी बनाने के संरक्षण सहित) Firefox 3.6 में महान काम करता है। लेकिन यह सफारी 4 में काम नहीं करता है। [अद्यतन: या क्रोम में। तो मुद्दा Firebug और वेबकिट कंसोल के बीच एक अंतर हो रहा है] अगर मैं
console.debug('A')
_.log('B');
के साथ ऊपर का पालन पहले बयान दोनों ब्राउज़र में ठीक काम करता है, लेकिन दूसरा एक उत्पन्न करता है। "लेखन त्रुटि: प्रकार त्रुटि" में सफारी। क्या फ़ायरबग और सफारी वेब डेवलपर टूल्स कंसोल को कार्यान्वित करने के बीच यह एक अंतर है? यदि ऐसा है, तो
ऐप्पल के
वेबकिट के हिस्से पर बहुत परेशान है। कंसोल फ़ंक्शन को प्रोटोटाइप पर बाध्य करना और फिर ऑब्जेक्ट पर सीधे बाध्य करने के बजाय तत्काल, मदद नहीं करता है।
मैं निश्चित रूप से console.debug
को _.log
पर असाइन किए गए अज्ञात फ़ंक्शन से कॉल कर सकता हूं, लेकिन फिर मैं अपनी लाइन संख्या खो दूंगा। कोई अन्य विचार?
यह वेबकिट की एक विशेषता है, एक बग नहीं ;-) https://bugs.webkit.org/show_bug.cgi?id=20141 –
संबंधित: http://stackoverflow.com/questions/14146316/why-does-scope-reduction-in-safari-break-existing-code – MvG