Sunday 15 February 2015

javascript - Weird regex in inherit.js (by John Resig) - why, what and how? -


इस सवाल का पहले से ही एक उत्तर है: < / P>

  • 1 उत्तर

    मैंने हाल ही में जॉन Resig, कहा जाता है। मैं आमतौर पर उन पुस्तकालयों के मुख्य भाग को समझने की कोशिश करता हूं जो मैं उपयोग कर रहा हूं, और बहुत सारे सिर खरोंचने के बाद मुझे आखिर में कोड की हार्ड बिट्स समझा गया था (अर्थात् वह सुपर वर्ग की इसी विधि को कैसे कह सकता है)।

    1% बिट जो मुझे नहीं मिलता है वह regex से संबंधित है

      fnTest = /xyz/.test(function() {xyz;})? / \ B_super \ b /: /.*/;   
    1. एक फ़ंक्शन के साथ regex / xyz / परीक्षण किया गया है दोनों और राज्य है कि परीक्षण तर्क के रूप में एक स्ट्रिंग लेता है फ़ंक्शन का कोई जिक्र नहीं है, लेकिन कंसोल में कोई त्रुटि नहीं होने के कारण, मुझे लगता है कि यह उड़ जाना चाहिए, लेकिन यह कैसे काम करता है?
    2. अगले डब्ल्यूटीएफ यह है कि फ़ंक्शन बॉडी xyz; < / code>। यह फ़ंक्शन निष्पादित नहीं किया जा सकता, क्योंकि यह अन्यथा " संदर्भ त्रुटि: xyz परिभाषित नहीं है " में परिणाम देगा। सही? तो यह क्या करता है?
    3. यदि परीक्षण का नतीज़ सही है, तो fnTest एक regex के बराबर है जो एक शब्द पर _super की जांच करता है सीमा, और एक regex जो कुछ भी पर मेल खाता है डबल डब्ल्यूटीएफ; फिर कैसे और क्यों

      बाद में वहाँ एक संबंधित बिट का कोड है, जहां यह regex उपयोग किया जा रहा है।

        // हम एक मौजूदा फ़ंक्शन प्रोटोटाइप ओवरराइट कर रहे हैं की जाँच करें [नाम] = टाइपफ प्रोप [नाम] == "फ़ंक्शन" & amp; amp; प्रकार का _super [name] == "फ़ंक्शन" & amp; amp; FnTest.test (सहारा [नाम])? AFunctionThatCanCallSuper / * बहुत सारे कोड * /: सहारा [नाम];   

      मैं इसके बारे में सोच रहा हूँ बिट है fnTest.test (prop [name]) । मैं अन्य सभी परीक्षणों को समझता हूं, जो जांचता है कि संपत्ति मौजूद है या नहीं, फ़ंक्शन है, आदि, लेकिन यह नहीं कि रिजक्स परीक्षण क्या करता है। कोई भी?

      क्या :

      परीक्षण केवल स्ट्रिंग को इनपुट के रूप में लेता है, इसलिए कोई फ़ंक्शन toString एड होगा, जैसे कि किसी अन्य ऑब्जेक्ट को स्ट्रिंग नहीं है xyz को एक चर के रूप में व्याख्या नहीं किया गया है, लेकिन एक स्ट्रिंग के रूप में, इसलिए यह संदर्भ संदर्भ नहीं डालेगा यह अन्य स्थानों पर भी होता है, उदाहरण के लिए इसे लें:

        var a = function () {}; Var बी = फ़ंक्शन () {}; Console.log (a + b); <`` स्ट्रिंग` `  

      के साथ` `` `कोअर क्यों :

      पुराने ब्राउज़रों में फ़ंक्शन का सीरियलाइजेशन विश्वसनीय नहीं है फ़ंक्शन के शरीर में _super संपत्ति का उत्पादन नहीं करता, लेकिन function {[native code]} या [वस्तु ऑब्जेक्ट] जैसे कुछ (मैं मान रहा हूँ) ; उन मामलों में कुछ भी मिलान करने के लिए एक regex जैसे कि /.*/ का उपयोग करें और ऑप्टिमाइज़ेशन न करें जो ब्राउज़रों में किया जा सकता है कि सही परिणाम आउटपुट।

      अधिक के लिए संबंधित लिंक जानकारी:

      (एंड्रियास द्वारा पाया गया)



No comments:

Post a Comment