2012-07-03 24 views
7

मैं "लर्निंग jQuery" (तीसरा संस्करण) के माध्यम से अपना रास्ता काम कर रहा हूं।jQuery: "वैल्यू कॉलबैक" क्या है?

अध्याय 4 में: "जोड़ तोड़ डोम" वहाँ एक अनुभाग समझा कुछ "मूल्य कॉलबैक" कहा जाता है। यह मेरे लिए नई चीज है।

लेखक इसे लिंक की सूची के उदाहरण के माध्यम से बताता है जिसमें प्रत्येक की आईडी अद्वितीय होना चाहिए।

पुस्तक से:।

"एक मूल्य कॉलबैक बस एक समारोह है कि एक तर्क के लिए मान के बजाय आपूर्ति की है है इस समारोह तो एक बार तत्व प्रति मिलान किया सेट में शुरू हो जाती है जो कुछ भी डेटा दिया जाता है। फ़ंक्शन से विशेषता के लिए नए मान के रूप में उपयोग किया जाता है। उदाहरण के लिए, हम प्रत्येक तकनीक के लिए एक अलग आईडी मान उत्पन्न करने के लिए इस तकनीक का उपयोग कर सकते हैं: "

चफर, जोनाथन (2011-09-23)। सीखना jQuery, तीसरा संस्करण (पृष्ठ 116)। पैकेट प्रकाशन। किंडल संस्करण।

jQuery(document).ready(function($){ 

// get all external links 
    $('div.chapter a').attr({ 
     rel:'external', 
     title:'Learn more at Wikipedia', 
     id: function (index, oldValue) { 
       return 'wikilink-' + index; 
     } 
    }); 
}) 

वर्क्स एक आकर्षण की तरह है, लेकिन यांत्रिकी आईडी की: संपत्ति मुझे भाग जाते हैं।

  1. कैसे पैरामीटर 1 (इंडेक्स) पता है एक पूर्णांक होना करने के लिए?
  2. फ़ंक्शन को वृद्धि अनुक्रमणिका कैसे पता चलता है?
  3. दूसरा पैरामीटर (पुराना वैल्यू) संपत्ति के पुराने मूल्य (संशोधन से पहले) को कैसे पकड़ता है?
  4. क्या यह एक jQuery निर्माण है? एक JSON बात? यह बढ़ीया है। यह काम करता है, लेकिन ... क्या बिल्ली इस "मूल्य कॉलबैक" चीज से बना है?

कृपया सलाह

उत्तर

6

1) कैसे पैरामीटर 1 (इंडेक्स) एक पूर्णांक होना करने के लिए पता है?

jQuery एक पूर्णांक पास करता है।

2) फ़ंक्शन को इंडेक्स बढ़ाने के लिए कैसे पता चलता है?

कॉलबैक index में वृद्धि नहीं करता है, jQuery विधि करता है।

3) दूसरा पैरामीटर (पुराना वैल्यू) संपत्ति के पुराने मूल्य (संशोधन से पहले) को कैसे पकड़ता है?

jQuery इसे पास करता है।

सवालों 1-3 के जवाब शायद सबसे अच्छा एक समारोह है कि $.attr को कुछ इसी तरह करता है के द्वारा समझा जाता है:

Array.prototype.each = function (f) { 
    var i; 
    for (i=0; i < this.length; ++i) { 
     f(i, this[i]); 
    } 
}; 

['zero', 'one', 'two'].each(function (i,item) {console.log({i: item})}); 

f एक कॉलबैक है। each प्रत्येक संग्रह & आइटम के लिए संग्रह पर पुन: सक्रिय करने और f पर कॉल करने के लिए ज़िम्मेदार है। एक ही कोड संरचना कार्यों के लिए इस्तेमाल किया जा सकता:

/* Map each item in a sequence to something else, 
* returning a new sequence of the new values. 
*/ 
Array.prototype.map = function (f) { 
    var i, result = []; 
    for (i=0; i < this.length; ++i) { 
     result[i] = f(i, this[i]); 
    } 
    return result; 
}; 

['zero', 'one', 'two'].map(function(i,item) {return item.length}); 
// result: [4, 3, 3] 

/* Return a sequence of the items from this sequence 
* for which 'keep' returns true. 
*/ 
Array.prototype.filter = function (keep) { 
    var i, result = []; 
    for (i=0; i < this.length; ++i) { 
     if (keep(i, this[i])) { 
      result.push(this[i]); 
     } 
    } 
    return result; 
}; 

['zero', 'one', 'two'].filter(function(i,item) {return item.length <= 3}); 
// result: ['one', 'two'] 

mapconcat का कार्यान्वयन foldl and foldr एक व्यायाम के रूप में छोड़ दिया। एक और अभ्यास के रूप में, each के संदर्भ में map और filter को फिर से लिखें।

ध्यान दें कि ये फ़ंक्शंस केवल यह बताते हैं कि कॉलबैक कैसे काम करते हैं। वे उत्पादन कोड में समस्याएं पैदा कर सकते हैं।

4) क्या यह एक jQuery निर्माण है? एक JSON बात? यह बढ़ीया है। यह काम करता है, लेकिन ... यह "मूल्य कॉलबैक" चीज क्या है?

Callbacks एक सामान्य तकनीक है जो jQuery का व्यापक उपयोग करता है। वे functional programming की मुख्य विशेषता हैं, जहां फ़ंक्शन डेटा हैं जिन्हें अन्य डेटा प्रकारों की तरह संचालित किया जा सकता है। इस प्रकार, आपके पास ऐसे कार्य हैं जो तर्क के रूप में कार्य करते हैं और कार्य वापस कर सकते हैं। कुछ संदर्भों में, callbacks को "निरंतरता" के रूप में भी जाना जाता है और continuation passing style (CPS) का आधार बनता है। asynchronous function calls [2] के लिए यह विशेष रूप से महत्वपूर्ण है (जहां synchronous calls के विपरीत गणना के पहले फ़ंक्शन वापस आता है), जैसे कि अजाक्स अनुरोधों के लिए उपयोग किया जाता है। सीपीएस की कुछ शक्तियों को देखने के लिए, "Use continuations to develop complex Web applications" पढ़ें।

इसका दूसरा पहलू "मूल्य कॉलबैक" में "मान" है, क्योंकि जेएस गतिशील रूप से टाइप की गई भाषा है (प्रकार चर के बजाय डेटा से जुड़े होते हैं), औपचारिक पैरामीटर ऑब्जेक्ट्स के लिए बाध्य हो सकते हैं किसी भी तरह का। पारित होने के आधार पर एक फ़ंक्शन अलग-अलग व्यवहार कर सकता है। कभी-कभी यह तर्क के प्रकार की जांच करके कार्यान्वित किया जाता है, जो प्रभावी रूप से ad-hoc polymorphism (भाषा के बजाए फ़ंक्शन, प्रेषण को संभालना चाहिए)। हालांकि, parametric polymorphism या (उसमें विफल) duck typing हमेशा तर्क प्रकारों की जांच करने पर प्राथमिकता दी जानी चाहिए। पैरामैट्रिक पॉलिमॉर्फिज्म यह सुनिश्चित करके हासिल किया जाता है कि किसी दिए गए फ़ंक्शन को पारित किए जाने वाले सभी प्रकार एक ही इंटरफ़ेस (विधि नाम, तर्क, पूर्व शर्त, पोस्टकंडिशन &) का समर्थन करते हैं। उदाहरण के लिए, सभी अनुक्रम प्रकारों में length संपत्ति होनी चाहिए और पूर्णांक द्वारा अनुक्रमित किया जाना चाहिए; जब तक वह धारण करता है, तब तक आप अपने स्वयं के अनुक्रम प्रकार का उपयोग कई कार्यों के साथ कर सकते हैं जो सरणी लेते हैं।

मुझे यकीन नहीं है कि जेएसओएन द्वारा आपका क्या मतलब है, लेकिन शायद यह आमतौर पर इसका मतलब नहीं है। जेएसओएन जेएस ऑब्जेक्ट शाब्दिक वाक्यविन्यास के सीमित संस्करण के आधार पर डेटा इंटरचेंज प्रारूप है। जेएसओएन नमूना कोड या उद्धृत पाठ में कहीं भी शामिल नहीं है।

+0

ग्रेट ब्रेकडाउन। धन्यवाद! – sleeper

+0

यहां तक ​​कि बेहतर टूटना! मुझे ये अब मिला। तो यह पैटर्न बिल्कुल करीबी का उदाहरण नहीं है? – sleeper

+0

करी का यह चर्चा अभी भी इतना नया है 2, यह मेरे सिर पर है।हालांकि, आपका ब्रेकडाउन पूरी तरह से मेरे प्रश्न में उठाए गए मुद्दों का उत्तर देता है और बताता है। तो मैंने आपके उत्तरों की अपनी पसंद को बदल दिया है। इस जवाब में आपके द्वारा किए गए सभी कार्यों के लिए धन्यवाद! – sleeper

4

यह एक JQuery निर्माण है। यदि आप स्रोत को देखते हैं, तो आप पाएंगे कि JQuery यह जानने के लिए पैरामीटर का निरीक्षण कर रहा है कि आपने कोई मान या फ़ंक्शन पारित किया है या नहीं। यदि यह एक कार्य है, तो यह आपके द्वारा देखे जाने पर संभालता है।

+0

वाह। बहुत ही शांत। क्या आप इस विषय पर और पढ़ने की सिफारिश कर सकते हैं? – sleeper

+0

वास्तव में, '$ .attr' करी का उपयोग नहीं करता है। करीबी * एन * -री फ़ंक्शन (एक फ़ंक्शन जो * एन * तर्क लेता है) को * एन * यूनरी फ़ंक्शंस में परिवर्तित कर रहा है, जिनमें से प्रत्येक (अंतिम को छोड़कर) एक यूनरी फ़ंक्शन देता है। – outis

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