2011-01-08 19 views
7

मैं लगातार चर वैल्यू कैसे देखूं। उदाहरण के लिए:जावास्क्रिप्ट: लगातार चर मूल्यों की निगरानी कैसे करें

if(variable == 'value'){ 
    dosomething(); 
} 

अगर मैं लगातार यह या कुछ और लूप में चलाए यह काम करेगा, लेकिन वहाँ है कि ट्रिगर जैसे ही चर मान पर सेट है की एक कारगर तरीका है?

+1

। मुझे लगता है कि –

+0

कोई अन्य तरीका नहीं है कुछ कार्यान्वयन विशिष्ट तरीके हैं। क्या आपके पास एक लक्षित ब्राउज़र है, या जितना संभव हो सके? – Hemlock

+0

मैं एक मोबाइल ऐप बना रहा हूं, इसलिए मेरे पास नवीनतम जावास्क्रिप्ट तकनीकों और सर्वोत्तम प्रथाओं का समर्थन किया गया है क्योंकि जेएस को उद्देश्य सी में परिवर्तित किया गया है। मैं फ़ंक्शन का मान सेट नहीं कर रहा हूं, इसे किसी तृतीय पक्ष से गतिशील रूप से दिया जा रहा है एक उपयोगकर्ता एक बटन क्लिक करता है। मैं उस मान को डिफॉल्ट से किसी अन्य चीज़ में बदलने की प्रतीक्षा कर रहा हूं। – Connor

उत्तर

3

उपयोग setInterval:

var key = '' 
setInterval(function(){ 
    if(key == 'value'){ 
    dosomething(); 
    } 
}, 1000); 
+0

यह एक अलग प्रश्न के लिए एक उपयोगी उत्तर है। अधिकांश समय आप संपत्ति परिवर्तनों की खोज नहीं करेंगे, क्योंकि वे फ़ंक्शन की टिकों के बीच होंगे। –

4

रूप @Pekka टिप्पणी की है, तो आप एक टाइमर लगातार चर पोल हो सकता है। एक बेहतर समाधान, यदि यह आपका कोड है जो चर बदल रहा है, तो केवल वैरिएबल को सीधे सेट नहीं करना है, बल्कि सभी सेटर्स फ़ंक्शन को कॉल करते हैं। फ़ंक्शन तब वैरिएबल सेट कर सकता है और आपको आवश्यक अतिरिक्त प्रोसेसिंग कर सकता है।

function setValue(value) { 
    myVariable = value; 
    notifyWatchers(); 
} 
10

Object.watch:

एक संपत्ति के लिए

घड़ियाँ एक मूल्य आवंटित करने के लिए और जब ऐसा होता है एक समारोह चलाता है।

Object.watch() for all browsers? क्रॉस-ब्राउज़र तरीके ब्राउज़रों कि यह मूल रूप से समर्थन नहीं करते पर Object.watch करने के बारे में बात करती है।

+1

+1 सबसे प्रभावी तरीका, और यदि आप वैश्विक चर देखना चाहते हैं तो आप window.watch ('variable', हैंडलर) का उपयोग कर सकते हैं; –

+0

मैं एक मोबाइल ऐप बना रहा हूं, इसलिए मेरे पास नवीनतम जावास्क्रिप्ट तकनीकों और सर्वोत्तम प्रथाओं का समर्थन किया गया है क्योंकि जेएस को उद्देश्य सी में परिवर्तित किया गया है। मैं फ़ंक्शन का मान सेट नहीं कर रहा हूं, इसे किसी तृतीय पक्ष से गतिशील रूप से दिया जा रहा है एक उपयोगकर्ता एक बटन क्लिक करता है। मैं उस मान को डिफॉल्ट से किसी अन्य चीज़ में बदलने की प्रतीक्षा कर रहा हूं। – Connor

+0

मान लें वैरिएबल वैश्विक है: फ़ंक्शन हैंडलर (पुराना, नयावाल) {if (oldval! = Newval) // कुछ करें} window.watch ('variable', हैंडलर); –

4

यदि आप अपने चर को समाहित करते हैं ताकि मूल्य केवल फ़ंक्शन को कॉल करके सेट किया जा सके, यह आपको मूल्य की जांच करने का मौका देता है।

function ValueWatcher(value) { 
    this.onBeforeSet = function(){} 
    this.onAfterSet = function(){} 

    this.setValue = function(newVal) { 
     this.onBeforeSet(value, newVal) 
     value = newVal; 
     this.onAfterSet(newVal) 
    } 
    this.getValue = function() { 
     return value; 
    } 
} 

var name = new ValueWatcher("chris"); 

wacthedName.onBeforeChange = function(currentVal, newVal) { 
    alert("about to change from" + currentVal + " to " + newVal); 
} 

name.setValue("Connor"); 
6
Object.defineProperty(Object.prototype, 'watch', { 
    value: function(prop, handler){ 
     var setter = function(val){ 
      return val = handler.call(this, val); 
     }; 
     Object.defineProperty(this, prop, { 
      set: setter 
     }); 
    } 
}); 

उपयोग कैसे करें:

var obj = {}; 

obj.watch('prop', function(value){ 
    console.log('wow!',value); 
}); 

obj.prop = 3; 
एक टाइमर के साथ
+2

क्या आप समझा सकते हैं कि यह कैसे काम करता है? ऐसा लगता है कि यह बहुत अच्छा काम करता है, लेकिन मैं वास्तव में कैसे पालन नहीं कर रहा हूं :) – 1252748

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