जावास्क्रिप्ट पुस्तकालयों के बीच विस्तार विधि बहुत आम है और आम तौर पर एक विधि है जो उपभोग करने वाले कोड को सभी ऑब्जेक्ट्स और एक या अधिक ऑब्जेक्ट्स को एक लक्षित ऑब्जेक्ट में जोड़ने की अनुमति देती है। कोड आमतौर पर बहुत सरल होता है: पहले से परे प्रत्येक तर्क की अपनी सभी कुंजीों पर पुनरावृत्ति करें और पहले तर्क में संग्रहीत मूल्य की प्रतिलिपि बनाएँ।
"Mixin" एक डिजाइन पैटर्न है जिसमें आप गुण और विधियों आप अपने सिस्टम में कई वस्तुओं भर में साझा करना चाहते हैं की एक विशेष सेट के लिए कंटेनर का एक प्रकार के रूप में एक वस्तु का उपयोग करने के लिए संदर्भित करता है। उदाहरण के लिए, आपके पास चौड़ाई और ऊंचाई गेटर्स और सेटर्स हो सकते हैं जो आपके एप्लिकेशन में सभी यूआई घटकों पर लागू हो सकते हैं और इसलिए आप जावास्क्रिप्ट के मामले में बनाएंगे, या तो एक ऐसा फ़ंक्शन जिसे "नया" या ऑब्जेक्ट शाब्दिक के साथ तुरंत चालू किया जा सकता है इन तरीकों को रखता है। फिर आप अपने सिस्टम में किसी भी ऑब्जेक्ट पर इन तरीकों की प्रतिलिपि बनाने के लिए "विस्तार" प्रकार फ़ंक्शन का उपयोग कर सकते हैं।
अंडरस्कोर एक mixin तरीका है कि अनिवार्य रूप से सिर्फ एक का विस्तार जहां वस्तुओं 'तरीकों में पारित आधार से जुड़ जाते हैं के सभी चेनिंग में उपयोग के लिए वस्तु को रेखांकित किया है। jQuery jQuery.fn की विस्तारित विधि के साथ एक समान चीज़ करता है।
व्यक्तिगत रूप से मुझे विस्तार करना पसंद है, "इन ऑब्जेक्ट्स से इस ऑब्जेक्ट में सबकुछ कॉपी करें" टाइप व्यवहार, जबकि एक अलग मिश्रण विधि है, जिसके बजाय केवल एक स्रोत ऑब्जेक्ट स्वीकार करता है और फिर गुणों के नाम के रूप में सभी अन्य तर्कों का व्यवहार करता है और प्रतिलिपि बनाने के तरीके (यदि केवल लक्ष्य और स्रोत को आगे तर्क के साथ पास नहीं किया जाता है तो यह केवल एकल स्रोत विस्तार की तरह कार्य करता है)।
उदा।
function mixin(target, source) {
function copyProperty(key) {
target[key] = source[key];
}
if (arguments.length > 2) {
// If there are arguments beyond target and source then treat them as
// keys of the specific properties/methods that should be copied over.
Array.prototype.slice.call(arguments, 2).forEach(copyProperty);
} else {
// Otherwise copy all properties/methods from the source to the target.
Object.keys(source).forEach(copyProperty);
}
}
यह उत्तर Ext.js के लिए बहुत विशिष्ट है और कई अन्य जावास्क्रिप्ट पुस्तकालयों पर लागू नहीं है (jQuery और अंडरस्कोर केवल दो उदाहरण हैं)। – natlee75
@ natlee75 मेरा जवाब कह रही है कि mixins प्रोटोटाइप श्रृंखला का उपयोग नहीं करते हैं, और यह 'विफल रहता है instanceof' परीक्षण, Ext-जे एस उनमें से एक कार्यान्वयन है (वे अगर कुछ एक अलग तरीके से एक mixin है आप जाँच करें)। जहां तक मुझे पता है, jquery या underscore प्रोटोटाइप श्रृंखला में सेट करके मिश्रण को कार्यान्वित नहीं करता है (वे केवल गुणों की प्रतिलिपि बनाते हैं)। आपकी टिप्पणी का तात्पर्य है कि jquery और underscore में mixins हो सकते हैं जो उदाहरण के साथ सही ढंग से काम करते हैं? कृपया विस्तृत करें/ –
नहीं, लेकिन उनके 'विस्तार' कार्य या तो नहीं करते हैं। केवल "कक्षा पुस्तकालय" (जैसे 'Ext.define') प्रोटोटाइपिकल विरासत के लिए" विस्तार "शब्द का उपयोग करते हैं। – Bergi