यह महत्वपूर्ण है कि लोग कार्य वापस करने वाले कार्यों के मूल्य को समझें; इस तकनीक का उपयोग करके आप कोड, जावास्क्रिप्ट दक्षता, और जावास्क्रिप्ट कितनी शक्तिशाली हो सकती है, इसकी एक समझ प्राप्त कर सकते हैं।
मैंने एक त्वरित उदाहरण बनाया है जिसे मैं आपको दिखाना चाहता हूं ताकि आप यह विचार प्राप्त कर सकें कि मैं संवाद करने की कोशिश कर रहा था।
मान लीजिए कि आप दोनों प्राप्त तरीकों के साथ दो बच्चे वस्तुओं के साथ एक मेजबान वस्तु है, और दोनों बिल्कुल एक ही काम करते हैं लेकिन एक अलग विशेषता के साथ करते हैं:
var accessors = {
sortable: {
get: function() {
return typeof this.getAttribute('sortable') != 'undefined';
}
},
droppable: {
get: function() {
return typeof this.getAttribute('droppable') != 'undefined';
}
}
};
एक ही कोड दोहरा आदर्श नहीं है, इसलिए हम एक बाहरी समारोह बना सकते हैं, यह एक विशेषता तर्क गुजर:
function getAttribute(attr) {
return typeof this.getAttribute(attr) != 'undefined';
}
var accessors = {
sortable: {
get: function() {
return getAttribute('sortable');
}
},
droppable: {
get: function() {
return getAttribute('droppable');
}
}
};
ऐसा इसलिए है क्योंकि वहाँ एक अतिरिक्त, मध्यवर्ती समारोह निष्पादन हर बार विधि कहा जाता है एक बहुत बेहतर है लेकिन अभी भी आदर्श नहीं है।
क्या सबसे अच्छा काम करेगा एक समारोह है कि अंतिम समारोह लौट आए है - कि हर कॉल के साथ अतिरिक्त समारोह निष्पादन को खत्म करेगा पाने के लिए:
function generateGetMethod(attr) {
return function() {
return typeof this.getAttribute(attr) != 'undefined';
};
}
var accessors = {
sortable: {
get: generateGetMethod('sortable')
},
droppable: {
get: generateGetMethod('droppable')
}
};
क्या आपने ऊपर देखा, एक समारोह फ़ंक्शन है; प्रत्येक विधि को संपत्ति प्राप्त करने के लिए अपनी विधि मिलती है और प्रत्येक कॉल पर कोई ओवरहेड नहीं होता है।
यह वास्तव में उपयोगी तकनीक है जो आपको समान कोड दोहराने से बचाती है और, जब सही तरीके से उपयोग की जाती है, तो समझना और बनाए रखना आसान है!
स्रोत
2016-05-20 06:07:30
हाय, मैं फिर से यह जवाब पढ़ने के लिए आया और महसूस किया कि मैं अभी भी उलझन में हूं। क्या होगा अगर कोड उदाहरण के v2 में, आपको बस "get: getAttribute ('sortable')" मिला? क्या यह वही परिणाम नहीं लौटाएगा? जैसा कि "प्राप्त करें: जेनरेट विधि ('क्रमबद्ध')" – Synia