2013-07-24 8 views
6

मुझे कुछ कोड विरासत में मिला है जिसे मैं समझ नहीं पा रहा हूं।फ़ंक्शन के रूप में "यह" का उपयोग करें?

function updateQty() { 
     obj.find('.inputAmount').html(qty); 
     input.val(qty); 

     $.each(change_actions, function() { 
      this(qty); 
     }); 
    } 

.each फ़ंक्शन के अंदर वास्तव में क्या हो रहा है? मैंने कभी देखा नहीं है this(var) इस तरह से पहले इस्तेमाल किया।

+9

परिवर्तन_ क्रियाएं कार्यों की एक सरणी होनी चाहिए। सादे जेएस में, यह काम करता है: फ़ंक्शन लागू (v) {इसे वापस करें (v);} [1,2,3] .map (लागू करें, RegExp); – dandavis

+0

कॉलबैक बॉडी में 'console.log (this)' या 'console.dir (this) 'जोड़ें और देखें कि यह' क्या 'संदर्भित करता है। – fardjad

+0

$ .each() फ़ंक्शन का उपयोग किसी संग्रह पर पुनरावृत्त करने के लिए किया जा सकता है, चाहे वह ऑब्जेक्ट या सरणी हो। किसी सरणी के मामले में, कॉलबैक प्रत्येक सरणी अनुक्रमणिका और प्रत्येक बार एक संबंधित सरणी मान पास किया जाता है। (इस कीवर्ड के माध्यम से मूल्य भी एक्सेस किया जा सकता है ...): http://api.jquery.com/jQuery.each/ – svillamayor

उत्तर

3

लेखक सेटअप बाइंडिंग के साथ अपने स्वयं की घटनाओं, इसलिए संभावना है change_actions कार्यों को चलाने के लिए जब कुछ करने के लिए होता सदस्यता ले ली है कि कर रहे हैं मात्रा। इस तरह

कोशिश कुछ:

// initialize with a value 
var actions = [ 
    function(x){ console.log('I see a new x: ' + x); } 
]; 

// add actions "later" 
actions.push(function(x){ console.log('Yup, a new x: ' + x); }); 

// Then execute them: 
$.each(actions, function(){ 
    this(4); 
}); 

// add another one still 
actions.push(function(x){ console.log(x + ' looks new'); }); 

// re-iterate over them 
// Then execute them: 
$.each(actions, function(){ 
    this(5); 
}); 

और परिणाम: click घटना और कैसे आप $('element').click() के लिए बाध्य करके ग्राहकी जोड़ सकते हैं जैसे कि यह की

// first iteration (only 2 subscribed events) 
[15:56:50.030] "I see a new x: 4" 
[15:56:50.030] "Yup, a new x: 4" 

// second iteration (now we have 3, one was added later) 
[15:56:50.030] "I see a new x: 5" 
[15:56:50.030] "Yup, a new x: 5" 
[15:56:50.030] "5 looks new" // <-- new subscription 

थिंक। हर बार एक क्लिक होता है, किसी भी सब्स्क्राइब किए गए कार्यक्रम ट्रिगर हो जाते हैं।

5

this$.each के अंदर वर्तमान वस्तुओं को संदर्भित करता है जिन्हें आप लूप कर रहे हैं।

ऑब्जेक्ट को कुछ पास करने के लिए एक कार्य होना चाहिए।

3

आप निम्न उदाहरण से संबंधित कर सकते हैं:

var change_actions = [ 
    function(x) { alert(x + 1); }, 
    function(x) { alert(x + 2); } 
]; 

var qty = 5; 
$.each(change_actions, function() { 
    this(qty); 
}); 

JSFiddle: http://jsfiddle.net/fuyz2/

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