2012-10-03 19 views
5

मुझे पता है कि यह डूब गया है, मैं सिर्फ विचार की तलाश कर रहा था और मेरे जीवन के लिए यह काम ऐसा नहीं लगता है कि मैं इसे भी चाहूंगा।स्ट्रिंग ऑब्जेक्ट को उप-वर्गीकृत करने के लिए बस उत्सुक है। (प्रोटोटाइपिक रूप से)

उदाहरण सब की व्याख्या करनी चाहिए:

String.prototype.MyNS = function() {} 
String.prototype.MyNS.fooify = function() { 
    return this + 'foo!'; 
} 

var theString = 'Kung'; 

alert(theString.MyNS.fooify()); 

बेशक इस बस 'foo' ... यह() के बजाय काम नहीं करता है जोड़ने के लिए समारोह परिभाषा जोड़ देते हैं।

मैं समझता हूं कि मैंने वहां संदर्भ खो दिया है लेकिन यह पता नहीं लगा सकता कि मूल को कैसे आग लगाना है और मुझे जो चाहिए वह दे।

+0

संबंधित: http://stackoverflow.com/questions/7141734/extending-core-types-without-modifying-prototype? – valentinas

उत्तर

7

यहाँ एक तरीका है कि आप इसे कर सकता है:

String.prototype.MyNS = function() { 
    var _this = this; 
    return { 
     fooify: function() { 
      return _this + 'foo!'; 
     } 
    }; 
} 

, के रूप में slashingweapon बताते देखें कि यह in action on jsFiddle

ध्यान दें, कि आप यह बहुत की तरह फोन करना होगा:

String.prototype.MyNS().fooify(); 

जहाँ तक मुझे पता है, फ़ंक्शन के रूप में MyNS पर कॉल किए बिना इसे करने के लिए कोई क्रॉस-ब्राउज़र तरीका नहीं है।

+1

लेकिन आपको इसे "जो कुछ भी" कॉल करना है। .MNS()। Fooify(); ' – slashingweapon

+0

मुझे यह पसंद है! काश मैं इसे इस तरह फोन करने की ज़रूरत नहीं थी लेकिन कम से कम काम करता है ... धन्यवाद! –

+0

जो सही है: 'String.prototype.MyNS()। Fooify()' OR 'स्ट्रिंग। माइन्स()। Fooify()'? उत्तर @Slashingweapon द्वारा टिप्पणी को संदर्भित करता है, लेकिन फिर एक अलग वाक्यविन्यास को संदर्भित करता है। – jahroy

1

आप Stringprototype के लिए एक नया function (class ऊ संदर्भ में) जोड़ रहे हैं और यह वास्तविक String उदाहरण के लिए कोई पहुंच नहीं है।

तुम बस प्रोटोटाइप के लिए सीधे संपत्ति जोड़ सकते हैं:

String.prototype.fooify = function() { 
    return this + 'foo!'; 
} 
var theString = 'Kung'; 
alert(theString.fooify());