2010-04-23 11 views
18

कभी-कभी जावास्क्रिप्ट कोडिंग करते समय आप अलग-अलग उद्देश्यों के लिए स्थानीय चर में ऑब्जेक्ट this का संदर्भ संग्रहीत करते हैं (उचित दायरा सेट करने के लिए, कोड obfuscators, आदि में मदद करने के लिए)। ऐसे कोडर हैं जो this से that को अलियासिंग पसंद करते हैं ताकि यह स्पष्ट हो सके। अन्य लोग self का उपयोग करते हैं क्योंकि यह ऑब्जेक्ट को इंगित कर रहा है। मैंने स्रोत कोड भी देखा जहां me संदर्भ आयोजित किया गया और यह अभी भी समझ में आता है। निश्चित रूप से अन्य हैं।कि, स्वयं या मैं - जावास्क्रिप्ट में कौन सा पसंद है?

मुझे कौन सा पसंद करना चाहिए? क्या वहां एक सम्मेलन है जिसका प्रयोग करना है या यह केवल स्वाद का विषय है।

+1

ध्यान दें कि प्रोग्रामिंग पृष्ठभूमि एक प्रमुख (मुख्य?) कारक प्रतीत होता है - जो (डी) स्मॉलटॉक या पायथन, या सीखा उन लोगों से जो उनका इस्तेमाल करते हैं, 'स्वयं' का उपयोग करते हैं। – outis

उत्तर

42

मैं व्यक्तिगत रूप से that का उपयोग करता हूं, लेकिन जो कुछ भी स्पष्ट है वह ठीक है।

मैं self का उपयोग नहीं करेंगे, क्योंकि वैश्विक चर/window -property self पहले से ही window के लिए एक संदर्भ के रूप में मौजूद है।

var se1f= this;   // mis-spelled (perniciously). or maybe you just forgot to write line 
onclick= function() { 
    self.foo= 1;  // whoops, just wrote to `window`! 
}; 

जबकि:

var thot= this; 
onclick= function() { 
    that.foo= 1;  // error thrown 
}; 

हालांकि यह पूरी तरह से बेकार है (ताकि कोई देखभाल करने के लिए है कि आप इसे पीछा कर रहे हैं संभावना है), यह थोड़ा मूर्खतापूर्ण त्रुटियों के जोखिम को जा रहा अन-देखा बढ़ जाती है थोड़ा सा योगदान हुआ, लेकिन त्रुटियों को स्लाइड करने के साथ जावास्क्रिप्ट इतनी मैला है कि आप वास्तव में इसे और अधिक बनाना नहीं चाहते हैं।

+0

'स्वयं' को असाइन करते समय एक और दुर्घटना 'var' को भूल रही है। आईई * यह * नफरत करता है। –

+0

हाँ, अच्छी पुरानी आईई और इसकी असाइन-टू-विंडो-प्रॉपर्टी मजेदार। फिर भी, कम से कम यह आपको यह बताने के लिए एक त्रुटि फेंकता है कि आपने एक बुरा अभ्यास किया है। भले ही त्रुटि संदेश निराशाजनक रूप से भ्रामक है। – bobince

2

वहां आपकी सेब टोकरी में एक नारंगी है, this का एक बहुत ही विशिष्ट प्रासंगिक अर्थ है। विकल्प वास्तव में उन विकल्पों में से self और me के बीच है। उन लोगों के बीच ... आप चुनते हैं, इससे कोई फर्क नहीं पड़ता कि केवल व्यक्तिगत वरीयता है।

this आपके संदर्भ को संदर्भित करता है, इसलिए यह वास्तव में एक "विकल्प" नहीं है, जिसमें बहुत भ्रम और त्रुटियों को आसान बनाने के बिना आसान नहीं है। मुझे लगता है कि selfme (उदाहरण के लिए कोड, ढांचे, पुस्तकालयों, आदि) से अधिक उपयोग किया जाता है। यह सिर्फ वरीयता है, लेकिन मैं सहमत हूं कि self अधिक आकर्षक है, यकीन नहीं है कि क्यों ... फिर से मेरी वरीयता।

+2

मुझे 'me' कारण पसंद है क्योंकि यह टाइप करने के लिए दो कम अक्षर हैं ... लेकिन यह वास्तव में तब तक कोई फर्क नहीं पड़ता जब तक आप * सुसंगत * नहीं होते। –

+2

@codeka - महान बिंदु, स्थिरता * नाम * पसंद की पसंद से कहीं अधिक महत्वपूर्ण है –

+2

स्थिरता बिंदु पर सहमत। यह हो सकता है कि पसंद अन्य भाषाओं के प्रोग्रामर के अनुभव को धोखा दे। 'स्वयं' डेल्फी का संस्करण 'इस' और 'मैं' वीबी का संस्करण है। जहां तक ​​मुझे पता है, 'उस' का उपयोग किसी अन्य भाषा में नहीं किया जाता है। –

1

अच्छी तरह से व्यक्तिगत रूप से मैं परिवर्तनीय मतलब को "बाद में जिस चीज़ की आवश्यकता है" से थोड़ा अधिक बनाने में बेहतर होने की कोशिश कर रहा हूं। अक्सर आपको उन अस्थायी चरों की आवश्यकता होती है जो परिस्थितियों में थोड़ी सी गड़बड़ी होती हैं; ट्रैक रखने के लिए अस्थायी this स्टैश की दो या दो से अधिक परतें हो सकती हैं।

इस प्रकार, एक jQuery सेटअप में उदाहरण के लिए, मैं कुछ का उपयोग कर सकते तत्व प्रकार है कि एक अस्थायी this गुप्त कोष में धारण करना चाहिए ध्यान दें:

$('form').each(function() { 
    var $form = $(this); 
    $form.find('input:checkbox').each(function() { 
    var $checkbox = $(this); 
    // ... 
    }); 
}); 

चर पर "$" उपसर्ग का उपयोग करते हुए एक अच्छा तरीका है यह ट्रैक रखने के लिए कि ऑब्जेक्ट "jQuery-ized" है या नहीं :-)

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