2009-07-02 9 views
9

मुझे यकीन है कि मैं इस सवाल का गलत शब्दों में किया है, लेकिन मैं नहीं जानता कि यह अच्छी तरह से कैसे समझाने के लिए ...क्या मैं जावास्क्रिप्ट में ऑब्जेक्ट्स में सार्वजनिक फ़ंक्शन जोड़ सकता हूं? कैसे?

मैं एक अस्पष्ट विचार मैंने कहीं पढ़ा है कि मैं में वस्तुओं के लिए तरीके जोड़ सकते हैं जावास्क्रिप्ट - जिसके द्वारा मेरा मतलब है की तरह कुछ:

function Exclaimify(aString) 
{ 
    return aString + "!"; 
} 

var greeting = "Hello"; 
alert(greeting.Exclaimify()) // this shows "Hello!" in an alert box 

यह संभव है? यदि ऐसा है, तो मुझे इसे कैसे करना है?

+0

दो त्वरित टिप्पणी:: (1) स्ट्रिंग (यह), तुम्हें पता है के लिए कोई ज़रूरत नहीं "इस" एक स्ट्रिंग के बाद से आप एक String.prototype में हैं वाक्य रचना String प्रोटोटाइप को संशोधित करने के इस तरह दिखता है समारोह; (2) ऑब्जेक्ट.प्रोटोटाइप या ऐरे.प्रोटोटाइप में कुछ भी न जोड़ें। यदि आप करते हैं तो आप "(सरणी में var आइटम)" वाक्यविन्यास का उपयोग नहीं कर सकते हैं। –

+0

@ जॉन Kugelman: फिक्स्ड, धन्यवाद। – MGOwen

+0

कृपया अपने खुद के जवाब के साथ अपने प्रश्न का विस्तार नहीं है। यदि आपको लगता है कि एक अलग उत्तर आवश्यक है, तो कृपया नीचे अपना उत्तर पोस्ट करें। –

उत्तर

24

असाइन इसे करने के लिए बस यह की तरह एक चर है। फिर आप this का उपयोग कर सकते हैं। आसान!

var obj = {foo: "bar"}; 

obj.someFunc = function() 
{ 
    return this.foo; 
} 

यह बहुत अच्छा काम करता है ... को छोड़कर! एर, सिवाय, स्ट्रिंग्स पर नहीं, जो इस टॉमफूलरी से प्रतिरक्षा हैं। (वे पूरी तरह से अडिग हैं।) हालांकि, वहाँ एक और तरीका है, वस्तु की "वर्ग" को संशोधित करने और वहाँ विधि जोड़ने के लिए है जो है। और "कक्षा" से मेरा मतलब वास्तव में "प्रोटोटाइप" है। जावास्क्रिप्ट doesn't have classes, it has prototypes

var greeting = "Hello"; 

String.prototype.Exclaimify = function() 
{ 
    return this + "!"; 
} 

alert(greeting.Exclaimify()) // this shows "Hello!" in an alert box 
+0

शानदार - बिल्कुल वही था जो मैं बाद में था। – MGOwen

4

ऐसा लगता है कि आप तकनीक monkey patching कहा जाता है का उपयोग करना चाहते। उस आलेख में Duck Punching JavaScript - Metaprogramming with Prototype का एक लिंक है जो आपकी मदद कर सकता है।

+0

धन्यवाद। आपके लिंक किए गए लेख स्वीकार किए गए उत्तर के रूप में संक्षिप्त नहीं थे, लेकिन फिर भी स्पॉट पर हैं। – MGOwen

+0

जबकि इस सैद्धांतिक रूप से इस सवाल का जवाब कर सकते हैं, [यह बेहतर होगा] (http://meta.stackexchange.com/q/8259) जवाब के आवश्यक हिस्से में शामिल हैं, और संदर्भ के लिए लिंक प्रदान करेंगे। –

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

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