2011-09-05 9 views
6

घटना वस्तु और उसके निर्माता $.Event() मैं देख रहा हूँ के बारे में jQuery प्रलेखन के माध्यम से पढ़ना:वैकल्पिक `new` ऑपरेटर

new ऑपरेटर वैकल्पिक [जब निर्माता बुला] है।

यह अच्छा है! JQuery लोगों ने इस तरह की चाल कैसे खींची?

उत्तर

7

जॉन Resig बहुत अच्छी तरह से इस बताते हैं: http://ejohn.org/apps/learn/#36 और http://ejohn.org/apps/learn/#38

असल में, Event एक समारोह और एक वस्तु (कार्यों वस्तुओं रहे हैं) है। इवेंट की पहली पंक्ति जांचती है कि इसे फ़ंक्शन के रूप में या ईवेंट ऑब्जेक्ट (नए ऑपरेटर के साथ) के उदाहरण के रूप में कहा जा रहा है।

आप विशेष रूप से कैसे jQuery यह होता है, jQuery source की लाइन 3134-3138 पर देखने के लिए देख रहे हैं:

jQuery.Event = function(src, props) { 
    // Allow instantiation without the 'new' keyword 
    if (!this.preventDefault) { 
     return new jQuery.Event(src, props); 
    } 

और विवरण इस के लिए the jQuery forms पर है।

असल में, लाइन 3178-31 9 4 पर रोकथाम घटना घटना प्रोटोटाइप में जोड़ा जाता है। यदि घटना new के साथ तुरंत चालू हो जाती है तो इसे इस रोकथाम विधि को दिया जाएगा। अन्यथा, यह परिभाषित नहीं किया जाएगा।

+1

'this.preventDefault' क्या है? – Randomblue

+0

अद्यतन के लिए मेरी पोस्ट जांचें। –

3

किसी भी उपयोगकर्ता द्वारा परिभाषित जावास्क्रिप्ट फ़ंक्शन को या तो new ऑपरेटर के साथ या उसके साथ बुलाया जा सकता है। new के बिना यह एक सामान्य कार्य के रूप में काम करता है (क्योंकि यह वही है)। new के साथ, दुभाषिया प्रोटोटाइप सेट के साथ एक ताजा ऑब्जेक्ट बनाता है, और उस ऑब्जेक्ट को कॉल के this पैरामीटर बनाता है। यह ताजा ऑब्जेक्ट new ऑपरेटर का परिणाम है - को छोड़कर यदि फ़ंक्शन बॉडी return एक मान स्पष्ट रूप से है; फिर मूल्य मान वापस कर दिया।

तो अगर आप लिखना

function foo() { 
    return { bar: 42 }; 
} 

आप इसे या तो बिना या new साथ कॉल कर सकते हैं - वहाँ कोई अंतर नहीं है क्योंकि शरीर हमेशा स्पष्ट रूप से एक मान देता है, और उसके this कभी नहीं का उपयोग करता है।

संबंधित मुद्दे