2012-02-01 15 views
6

कोड (i) और (ii) के बीच क्या अंतर है नीचे लिखा गया है?का उपयोग करना। या [] ऑब्जेक्ट गुणों तक पहुंचने के लिए - क्या अंतर है?

(i)

var obj:Object = new Object(); 
obj.attribute = value ; 

(ii)

var obj:Object = new Object(); 
obj["key"] = value; 

कोई रन-टाइम निहितार्थ रहे हैं, तो मैं लिखने के इस:

var obj:Object = new Object(); 
obj.somekey = value1 ; 
obj["someKey"] = value2 ; 

कृपया व्याख्या।

उत्तर

21

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

परिणाम प्रदर्शन में एक महत्वपूर्ण अंतर है: ब्रैकेट वाक्यविन्यास को डॉट सिंटैक्स के रूप में निष्पादित करने में लगभग तीन गुना लगते हैं।

यहाँ मेरी बात को वर्णन करने के एक छोटे से गति परीक्षण है:

var start : int = getTimer(); 

var obj:Object = { something : "something" }; 

for (var i : int = 0; i < 100000000; i++) { 
    var n:String = obj.something; 
} 

trace ("Time with dot syntax: "+(getTimer() - start)); 

start = getTimer(); 

for (i = 0; i < 100000000; i++) { 
    var o:String = obj["something"]; 
} 

trace ("Time with bracket syntax: "+(getTimer() - start)); 

दो थे, तो एक ही है, अंकन के अलावा, वे समय की बिल्कुल एक ही ध्यान रखना चाहिए। लेकिन जैसा कि आप देख सकते हैं, यह मामला नहीं है। मेरी मशीन पर:

Time with dot syntax:  3937 
Time with bracket syntax: 9857 
+0

धन्यवाद, अच्छा कवर –

+2

बेंचमार्क के लिए बोनस प्वाइंट! –