2017-05-10 7 views
8

मैं अभी प्रोजेक्ट में कोड की एक पंक्ति पर ठोकर खा रहा हूं, जिसमें मैं वर्तमान में काम कर रहा हूं। मुझे लगता है कि मैं जावास्क्रिप्ट पर सभ्य हूं लेकिन ईमानदार होने के लिए, मुझे कोई संकेत नहीं है कि कोड की निम्न पंक्ति वास्तव में क्या करती है:जावास्क्रिप्ट कोड की यह पंक्ति संभवतः क्या कर सकती है?

var date = new (Function.prototype.bind.apply(Date, [null,].concat(buildDateParams(spec, base)))); 

क्या आप में से कोई जावास्क्रिप्ट गुरु संभवतः इस पर कुछ प्रकाश डाल सकता है?

buildDateParams मानों की एक सरणी बनाना प्रतीत होता है। पूर्णता 'के लिए, यहाँ समारोह है:

function buildDateParams(spec, base) { 
    if (!spec.match(specRegExp)) { 
     throw new Error('Invalid spec string'); 
    } 
    var specParts = spec.toLowerCase().split(':'); 
    let params = []; 
    for (let fieldIndex in fields) { 
     let field = fields[fieldIndex]; 
     let specPart = (fieldIndex < specParts.length) 
      ? specParts[fieldIndex] 
      : '0'; 
     if (!specPart.length) { 
      specPart = 'b'; 
     } 
     let param = 0; 
     if (specPart.substr(0, 1) === 'b') { 
      param = base[field.getter](); 
      specPart = specPart.substr(1); 
     } 
     if (specPart.length) { 
      param += parseInt(specPart); 
     } 
     params.push(param); 
    } 
    return params; 
} 
+1

ऐसा लगता है कि फ़ंक्शन संख्याओं की एक सरणी देता है, स्ट्रिंग नहीं। – Pointy

+0

मैंने उस फ़ंक्शन में आगे की जांच नहीं की है, तो आप आसानी से सही हो सकते हैं। इसे "स्ट्रिंग्स" के बजाय "मानों" में समायोजित कर देगा। – connexo

उत्तर

5

यह एक है कि काम करता है को छोड़कर तरह-की है

Date.bind(null, buildDateParams(spec, base)); 

का एक जटिल संस्करण; विचार यह है कि वह buildDateParams() फ़ंक्शन द्वारा जेनरेट किए गए पैरामीटर के सेट पर डेट कन्स्ट्रक्टर को बांधना चाहता है।

ES2015 प्रसार वाक्य रचना के साथ

, यह

Date.bind(null, ... buildDateParams(spec, base)); 

यह सिर्फ एक समारोह है कि कुछ पूर्व की व्यवस्था मानकों के अनुसार एक तिथि उदाहरण रिटर्न बनाने है लिखने के लिए काम करेंगे।

इसके अलावा, [null,] सरणी प्रारंभकर्ता में उस भयानक कॉमा की वजह से, इसमें आईई में समस्या हो सकती है (हालांकि .bind() के साथ एक आधुनिक आईई उस तत्व को दो तत्वों के रूप में समझ नहीं सकता है)।

+0

"जो काम करता है उसे छोड़कर" - क्या इसका वास्तव में मतलब है कि आपका संक्षिप्त संस्करण काम नहीं करता है? प्रोजेक्ट में मिले कोड के विपरीत आप दो पैरामीटर 'नल' और उस फ़ंक्शन द्वारा लौटाए गए सरणी के साथ बाध्य करने का सुझाव दे रहे हैं, जबकि मेरे कोड नमूने में यह केवल एक तर्क है, और सरणी जिसमें 'शून्य' है जिसका पहला तत्व है। – connexo

+0

@connexo yes क्षमा करें मेरी प्रारंभिक प्रतिक्रिया उस फ़ंक्शन से रिटर्न वैल्यू की सूक्ष्मता को पैरामीटर के रूप में उपयोग करने के लिए एक सरणी है; '... 'वाक्यविन्यास इसे संभाल लेगा। मैं मुझे एहसास करने में मदद करने के लिए आधे कप कॉफी का श्रेय देता हूं :) :) – Pointy

+0

@connexo यह भी ध्यान दें कि आपके द्वारा पोस्ट किए गए संस्करण में 'Function.prototype.bind.apply' की बजाय' date.bind.apply' का उपयोग किया जा सकता था। – Pointy

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