इंटरसेप्टिंग मैं a[i]
जैसे प्रत्येक सरणी एक्सेसर के साथ कुछ साइड इफेक्ट को जोड़ना चाहता हूं। उदाहरण के लिए, पक्ष प्रभाव कंसोल के लिए एक संदेश लिख रहे हैं, निम्नलिखित कार्यक्रम:जावास्क्रिप्ट सरणी एक्सेसर
1 // access a[0]
2 // access a[1]
3 // access a[2]
6 // print original total
मामले में:
var array = [1, 2, 3]
var total = 0;
for (var i in array) {
total += array[i]
}
console.log(total);
push
को अवरुद्ध करने में दिलचस्पी थी, मैं इस ब्लॉग
post और तकनीक से तकनीक का उपयोग करूंगा एड एक इंटरसेप्टर:
var _push = Array.prototype.push;
Array.prototype.push = function(item) {
console.log('pushing ', item, ' into ', this);
_push.apply(this, arguments);
}
यह संभव एक सरणी एक्सेसर के लिए एक ही चाल लागू है? या इस समस्या के लिए एक बेहतर समाधान क्या होगा? एक महत्वपूर्ण नोट यह है कि मैं प्रोग्राम के मूल कोड को संशोधित नहीं करना चाहता हूं। इसलिए, जेएस proxies
का उपयोग करने के लिए गेटर्स और सेटर्स को अवरुद्ध करने के लिए मेरी समस्या के लिए एक वैध विकल्प नहीं लगता है।
एक विशेष साइड इफेक्ट, मैं परिचय देना चाहता हूं, यदि एक्सेस किए गए मान को अपरिभाषित किया गया है (जेएस एरे के लिए सीमा अपवाद से बाहर सूचकांक में कुछ बदलाव) में अपवाद बढ़ाना है। मैं जांचता हूं कि वर्तमान में एक्सेसिंग मान बराबर है या नहीं undefined
, और उस मामले में अपवाद फेंक दें, अन्यथा केवल मूल मान वापस करें।
[एक में बदलावों का पता लगाना की संभावित डुप्लिकेट प्रॉक्सी ऑब्जेक्ट का उपयोग कर जावास्क्रिप्ट सरणी] (http://stackoverflow.com/questions/35610242/detecting-changes-in-a-javascript-array-using-the-proxy-object) –
@ मोहम्मद जो लिंक किया गया प्रश्न मदद नहीं करता है जीई overriding के साथ ओपी हालांकि अंतर्निर्मित सरणी के तंत्रिका व्यवहार। –
मैं @le_m –