2013-02-20 2 views
5

एक प्रोजेक्ट पर मैं वर्तमान में जावास्क्रिप्ट में काम कर रहा हूं, मैं दशमलव स्वरूपों का उपयोग कर रहा हूं ताकि तारों में एक घंटे/मिनट प्रारूप का उपयोग करने के बजाय गणना करना आसान हो संबंधित परियोजना)। हालांकि उपयोगकर्ता की स्क्रीन पर समय प्रदर्शित करने के लिए, टाइमकोड को एचएच: मिमी के रूप में दिखाया जाना चाहिए।जावास्क्रिप्ट प्रोटोटाइप फ़ंक्शन: एक समय स्ट्रिंग के लिए दशमलव समय मान

मैंने सोचा कि यह इस बात के लिए एक स्ट्रिंग प्रोटोटाइप समारोह का उपयोग करने के महान के रूप में यह मेरे जैसे कोड का उपयोग करने की अनुमति होगी होगा:

var time = 8.75; 
document.write("Meeting at "+time.toTime()); // writes: Meeting at 8:45 

अब तक, मुझे लगता है कि मिल गया है लगभग काम कर, का उपयोग करते हुए:

String.prototype.toTime = function(){ 
    var hrs = this.toString().slice(0,this.indexOf(".")); 
    var min = Math.round(this.toString().slice(this.indexOf("."))/100*60); 
    min = min<10 ? "0"+min : min.toString(); 
    return hrs+":"+min; 
} 

समस्या यह है कि यह केवल तभी काम करेगा जब परिवर्तनीय time एक स्ट्रिंग है। अन्यथा यह एक अपरिभाषित त्रुटि देगा।

जावास्क्रिप्ट में किसी भिन्न ऑब्जेक्ट पर प्रोटोटाइप लगाने का कोई तरीका होगा, तो मुझे time.toString().toTime() का उपयोग करने की आवश्यकता नहीं है?

धन्यवाद!

+0

'मदद Number.prototype.toTime' चाहेंगे? और आप अपने वर्तमान कोड में '(" "+ time) .toTime()' के लिए shorthand कर सकते हैं। – Passerby

+0

आप 'ऑब्जेक्ट.प्रोटोटाइप' का उपयोग कर सकते हैं क्योंकि सभी ऑब्जेक्ट्स इसके उत्तराधिकारी हैं। – TheBronx

+0

व्यक्तिगत रूप से मुझे प्रोटोटाइप को विस्तारित करने के बजाय एक फ़ंक्शन को मान पास करने के लिए एक क्लीनर दृष्टिकोण माना जाता है। –

उत्तर

5

सबसे पहले, आप Number प्रोटोटाइप में जोड़ सकते हैं। बहुत से लोग प्रोटोटाइप को संशोधित करने के खिलाफ चेतावनी देंगे, जो कई मामलों में उचित है। यदि कोई मौका है कि तीसरे पक्ष की स्क्रिप्ट आपके साथ चल रही हैं, तो प्रोटोटाइप को संशोधित करने का खतरा है।

दूसरे, मैं अपने कोड को सरल बनाया एक छोटे से, मापांक, और घंटे और मिनट की गणना करने के फर्श ... का उपयोग कर

Number.prototype.toTime = function(){ 
    var hrs = Math.floor(this) 
    var min = Math.round(this%1*60) 
    min = min<10 ? "0"+min : min.toString(); 
    return hrs+":"+min; 
} 

var time = 8.25; 
console.log("Meeting at "+time.toTime()); 
+0

आपको 'toString()। Split ("।")' नहीं है, यदि आप पहले से ही संख्या में हेरफेर कर रहे हैं ... 'parseInt',' Math.floor', आदि। चाल कर सकते हैं – Passerby

+0

@Passerby आप काफी सही हैं ... मैंने –

+0

के अनुसार उत्तर समायोजित किया, यह सही समझ में आता है। हालांकि, मुझे वहां एक छोटी सी बग मिली: 9.50' को "9:30" के बजाय "9:03" के रूप में आउटपुट किया जाएगा। कोई उपाय? – Oscar

-1

आप Object.prototype.toTime का उपयोग कर सकते हैं।

+0

आप क्यों नकारात्मक हैं? यदि आप 'ऑब्जेक्ट' –

+0

1 के 'प्रोटोटाइप' का उपयोग करते हैं, तो यह आपकी मदद करेगा। क्योंकि 'ऑब्जेक्ट.प्रोटोटाइप' में जोड़ना खतरनाक है जब तक कि आप _exactly_ को नहीं जानते हैं 2. क्योंकि यह तब प्रत्येक 'ऑब्जेक्ट' पर लागू होता है, यहां तक ​​कि वे जहां इस विधि का कोई मतलब नहीं है। – Alnitak

+0

हाँ, मुझे यह पता है, लेकिन कुछ नकारात्मक करने का मतलब है "पागल गलत जवाब"। यहां समाधान आपके मामले के लिए लागू होता है, लेकिन यह इंफ्लिक्ट खतरे का सबसे अच्छा उपयोग नहीं है। तो मुझे नहीं लगता कि यह अव्यवस्थित होने योग्य है: डी –

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