2009-11-09 13 views
5

मैं जावास्क्रिप्ट में एक ट्रिम फ़ंक्शन बनाने वाला था, लेकिन जैसा कि मैं इस विधि के लिए पहिया पहिया को फिर से शुरू नहीं करना चाहता हूं।
मैं इस लिंक मिल गया http://www.somacon.com/p355.phpक्या मुझे स्ट्रिंग के प्रोटोटाइप को संशोधित करना चाहिए?

समाधान यह प्रदान की है:

String.prototype.trim = function() { 
    return this.replace(/^\s+|\s+$/g,""); 
} 
String.prototype.ltrim = function() { 
    return this.replace(/^\s+/,""); 
} 
String.prototype.rtrim = function() { 
    return this.replace(/\s+$/,""); 
} 

भी यह कहता है कि अगर तुम Wnt don'y स्ट्रिंग के प्रोटोटाइप को बदलने के लिए तो इसका उपयोग करें:

function trim(stringToTrim) { 
    return stringToTrim.replace(/^\s+|\s+$/g,""); 
} 
function ltrim(stringToTrim) { 
    return stringToTrim.replace(/^\s+/,""); 
} 
function rtrim(stringToTrim) { 
    return stringToTrim.replace(/\s+$/,""); 
} 

मैं जानना चाहता हूं कि किस परिदृश्य में स्ट्रिंग के प्रोटोटाइप को संशोधित या किसी ऑब्जेक्ट को नहीं कहना चाहिए।

उत्तर

7

trim कार्यों कुछ ब्राउज़रों में मौजूद होने ECMAScript पांचवें संस्करण में मानकीकृत किया जा रहे हैं, साथ ही पहले से ही । तो:

  1. हाँ, उन्हें प्रोटोटाइप को जोड़ने को पूरी तरह से उचित है, लेकिन

  2. आप अगर वे पहले से वहाँ हो प्रोटोटाइप करने के लिए उन्हें नहीं जोड़ना चाहिए, जैसा कि आप सिर्फ एक जगह हो जाएगा एक धीमी जावास्क्रिप्ट एक के साथ तेजी से देशी कोड समारोह।

यह भी आम तौर पर मामूली तेजी दो की जगह के रूप में ट्रिम करने के लिए है:

// Add ECMA262-5 string trim if not supported natively 
// 
if (!('trim' in String.prototype)) { 
    String.prototype.trim= function() { 
     return this.replace(/^\s+/, '').replace(/\s+$/, ''); 
    }; 
} 
+1

+1 'if (! (String.prototype में' ट्रिम ') के लिए +1) {' –

+0

यदि (! String.prototype.trim) में क्या गलत है? मेरे लिए और अधिक कुशल लग रहा है। – KooiInc

+3

'इन' इस बात के बारे में अधिक स्पष्ट है कि यह किस चीज के लिए परीक्षण कर रहा है, किसी संपत्ति की सच्चाई पर निर्भर नहीं है या किसी अन्य भाषा के अपवाद पर विचार करने के लिए एक नई 'अपरिभाषित' को फिर से शुरू करने के विचित्र और भयानक जावास्क्रिप्ट क्विर्क पर निर्भर नहीं है। निश्चित रूप से इस विशेष मामले के लिए इससे कोई फर्क नहीं पड़ता है, लेकिन आम तौर पर मैं किसी ऑब्जेक्ट की संपत्ति होने पर परीक्षण के लिए 'इन' का उपयोग करता हूं। – bobince

1

इस तरह के बहुत उपयोगी उपयोगिता समारोह के लिए, मैं कहूंगा कि आप प्रोटोटाइप को संशोधित कर सकते हैं। लेकिन आप जानते हैं कि समारोह पहले से ही कुछ ब्राउज़रों में मूल रूप से मौजूद हो सकता है किया जाना चाहिए, ताकि आप इसे जांच होनी चाहिए: https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Objects/String

+0

और जो मामले तुम नहीं करना चाहिए, यह है ओवरहेड के कुछ किंड से संबंधित या क्या? –

+0

कोई "आपको नहीं होना चाहिए" मामला है, बस फैबियन ने क्या कहा है इसके बारे में जागरूक रहें। –

+0

महान जावास्क्रिप्ट 1.8.1 में string.trim() विधि है https://developer.mozilla.org/En/Core_JavaScript_1.5_Reference/Global_Objects/String/Trim –

2

सामान्य में - buildin वस्तुओं के एक प्रोटोटाइप बदलाव न करें। लेकिन आप अपने आसान काम को जोड़ सकते हैं।

और हमेशा से पहले आप जोड़ना जाँच:

//pre-1.6 javascript 
if (!Array.prototype.indexOf) { 
    Array.prototype.indexOf = function(elt) { 
     var len = this.length >>> 0; 
     var from = Number(arguments[1]) || 0; 
     from = (from < 0) ? Math.ceil(from) : Math.floor(from); 
     if (from < 0) 
      from += len; 
     for (; from < len; from++) { 
      if (from in this && this[from] === elt) 
       return from; 
     } 
     return -1; 
    }; 
} 

इस तरह आप गूदा तेजी से अधिलेखित नहीं किया समारोह है कि उपलब्ध कुछ समय हो सकता है buildin ...

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