2009-10-30 14 views
9

मैंने अक्सर एएस 3 कक्षाओं के निर्माता के भीतर एक init() देखा है, कभी-कभी कन्स्ट्रक्टर में एकमात्र कोड भी होता है। ऐसा करने में उपयोगी क्यों होगा, अगर आप कक्षा को शुरू करने के लिए केवल कन्स्ट्रक्टर फ़ंक्शन का उपयोग कर सकते हैं?क्रियालेख 3 init()

package 
{ 

    import flash.display.Sprite; 

    public class Example extends Sprite 
    { 

     public function Example() 
     { 
      init();     
     } 

     public function init ():void 
     { 

     //initialize here 

     } 

    } 

} 

उत्तर

16

एक्शनस्क्रिप्ट 3 में, कन्स्ट्रक्टर कोड हमेशा संकलित के बजाय व्याख्या किया जाता है। मेरा मानना ​​है कि कोड को एक init() फ़ंक्शन में ले जाने से इसे संकलित और अनुकूलित करने की अनुमति मिल सकती है।

http://blog.pixelbreaker.com/flash/as30-jit-vs-interpreted/

+1

वास्तव में, यदि आपके पास कोई महत्वपूर्ण कोड है तो इसे उस फ़ंक्शन में डालें जो कन्स्ट्रक्टर द्वारा बुलाया जाता है। – Allan

+0

मुझे पता नहीं था, दिलचस्प जानने के लिए दिलचस्प धन्यवाद, धन्यवाद! – JStriedl

6

कारण मैं इसे है ताकि मैं इसके बारे में एक नया उदाहरण बनाने के बिना एक वर्ग को पुनः आरंभ कर सकते हैं किया है। Init() विधि मूल रूप से एक "रीसेट" बटन के रूप में काम करती है, यदि आप इसे सही कोड करते हैं, तो आपको क्लास को प्रारंभिक स्थिति में वापस करने की इजाजत मिलती है, उदाहरण के लिए, सेट करने के लिए सेट किए गए किसी भी चर को अनुमति देता है।

इस पर निर्भर करता है कि आप इसे कैसे कोड करते हैं।

3

एक और कारण यह हो सकता है कि आपको मंच या अभिभावक कंटेनर के संदर्भ की आवश्यकता हो और ADDED_TO_STAGE श्रोता स्थापित करने के लिए बहुत आलसी हो। फिर आप कक्षा को तुरंत चालू कर देंगे, इसे कंटेनर में जोड़ें और फिर डिस्प्लेलिस्ट पर एक बार init() पर कॉल करें।

2

एएस 3 के लिए नए प्रोग्रामर अक्सर मंच (संदर्भित 'यह वहां नहीं है' स्थिति का संदर्भ देने में समस्याएं हैं)।

करने से ...:

public function ClassName() 
{ 
    super(); 
    addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true); 
} 

private function init(event : Event) : void 
{ 
    removeEventListener(Event.ADDED_TO_STAGE, init); 
    // Reference stage.stageWidth; 
    // Call init after some sort of load completion initialized in the constructor 
} 

... यह आसानी से निश्चित होती है।

या कभी-कभी आप कन्स्ट्रक्टर में एक एक्सएमएल लोडर प्रारंभ करते हैं, और फिर लोड पूर्ण होने पर प्रारंभिक कार्य को कॉल करते हैं।

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