विस्तार और कार्यान्वयन के बीच मुख्य अंतर यह है कि कार्यान्वयन कक्षा के प्रोटोटाइप को बदलता है, जबकि विस्तार एक प्रति बनाता है। इसका अर्थ यह है कि यदि आप कक्षा में बदलाव लागू करते हैं तो उस वर्ग के सभी उदाहरण तत्काल उस परिवर्तन को प्राप्त करेंगे, जबकि यदि आप विस्तार का उपयोग करते हैं तो सभी मौजूदा उदाहरण समान बने रहेंगे।
यह म्यूटोरियल से उद्धरण है, इसे देखें। http://mootorial.com/wiki/mootorial/02-class/#implement-vs.-extend
परीक्षण के लिए के रूप में
- मैं करूंगा बहुत ज्यादा आप निंजा वर्गों के साथ कुछ नमूना मामलों का निर्माण और http://www.jsfiddle.net करने पर उन्हें डाल अनुशंसा करते हैं - फिर कुछ विश्लेषणात्मक सलाह या गूगल पर या आईआरसी पर mootools मेल सूची के लिए पूछना (irc.freenode .NET # mootools), इसलिए mootools कोर टीम से कई हिट नहीं लगती हैं। आदर्श रूप में, आप हारून न्यूटन, अरियन, cpojer या rpflo :) जैसे किसी व्यक्ति से बात करना चाहते
अद्यतन: मैं भी इस बारे में भी ब्लॉग लेकिन मैं गलत था। उस क्रम में बस एक अंतर है जिसमें Extends
और Implements
जैसे म्यूटेटर लाए जाते हैं। आप कार्यान्वित और विस्तार कर सकते हैं लेकिन आपको इसे काम करने के लिए पहले विस्तारित करने की आवश्यकता है।
यहां अधिक पढ़ें: http://fragged.org/mootools-pattern-fun-class-implements-extends-at-the-same-time_1359.html
अद्यतन बाहर कर देता है, कुछ मामलों में, जहां इस उपयोगी है देखते हैं। यहां समस्या है:
var ninja = new Class({
kill: function() {
alert("kill!");
}
});
var human = new Class({
initialize: function(){
alert("i r human!");
}
});
var badass = new Class({
Implements: [ninja],
Extends: human,
initialize: function() {
alert("i r badass and.. ");
this.parent();
this.kill();
}
});
new badass(); // i r badass, i r human, this.kill is not a function exception.
... बस काम नहीं करता है। आप वर्ग मानव जरूरत निंजा बजाय और वर्ग बदमाश लागू करने के लिए बस मानव विस्तार करने के लिए। इंसानों के दुष्प्रभाव के अलावा एक नई हत्या विधि (जिसे वे जानते हैं या नहीं जानते) प्राप्त कर रहे हैं, इसका मतलब यह होगा कि बैडस उपयोग करने में सक्षम होगा।मारो और साथ ही अपने प्रत्यक्ष माता-पिता को भी बुलाओ।
चीजों को फिर से लिखना क्यों नहीं चाहते हैं और जटिलताओं? क्योंकि आप Request.JSONP जैसे देशी वर्ग का विस्तार कर रहे हैं और फिर अपने विस्तारित एक में एक नई स्टोरेज क्लास को मिश्रित करने का निर्णय लेते हैं। सच्ची कहानी ... किसी भी तरह से, आपके पास उपलब्ध कुछ कक्षाओं को पुनः प्राप्त करने की लक्जरी नहीं हो सकती है।
इस पर काबू पाने के लिए एक दिलचस्प पैटर्न (मानव अनुरोध को अपने अनुरोध पर विचार करें। Jsonp, कहीं और परिभाषित किया गया है) - यदि आप केवल उस कक्षा में अधिक विधियों और गुणों को जोड़ना चाहते हैं जो आप विस्तार कर रहे हैं लेकिन मिश्रण श्रेणी का पुन: उपयोग करने की योजना नहीं बनाते (निंजा):
human.implement(new new Class({
kill: function() {
alert("kill!");
}
}));
var badass = new Class({
Extends: human,
initialize: function() {
alert("i r badass and.. ");
this.parent();
this.kill();
}
});
new badass(); // // i r badass, i r human, kill!
बेशक, आप बस human.implement({ method: function });
कर सकता है, लेकिन एक वर्ग इतना अधिक हो सकता है।
आप अन्य उपयोगों के लिए अपने निंजा वर्ग के लिए एक बचाया संदर्भ चाहते हैं, ऊपर होगा इस रूप में एक ही होगा (यदि आप अपने mixin का पुन: उपयोग करने की योजना है): इस किसी मदद करता है
var ninja new Class({
kill: function() {
alert("kill!");
}
});
human.implement(new ninja);
// this is what differs from say - instantiation + shared inherited properties.
// also, a constructor will work.
// the alternative would just do:
// human.prototype.kill = function() { alert("kill"); }
var badass = new Class({
Extends: human,
initialize: function() {
alert("i r badass and.. ");
this.parent();
this.kill();
}
});
new badass(); // // i r badass, i r human, kill!
आशा । यहां एक व्यावहारिक उदाहरण दिया गया है जहां मैं एक अतिरिक्त स्टोरेज क्लास के साथ एक मिश्रण के रूप में Request.JSONP विस्तार कर रहा हूं: http://jsfiddle.net/dimitar/YacZe/
मैं functionallity परीक्षण करने के लिए कोशिश नहीं कर रहा हूँ, मैं का उपयोग कर एक रूपरेखा महान है समझने के लिए मैं वास्तव में क्या कर रहा हूँ कोशिश कर रहा हूँ .. मेरे लिए, लेकिन मैं अभी भी पता है कि मेरे काम के निहितार्थ हैं चाहता हूँ। (बीटीडब्ल्यू, मैं कार्यान्वयन पर सवाल नहीं उठा रहा हूं, बस इसे समझने की कोशिश कर रहा हूं) कोई दस्तावेज या उदाहरण नहीं है जो MooTools लाइब्रेरी के साथ इस तरह के अस्थिरता का उपयोग कैसे करें। अगर मुझे समझ में आया कि वास्तव में क्या हो रहा था (फ़ायरबग या अन्यथा देखकर) मैं समय से पहले स्मृति को अनुकूलित करने की कोशिश करने से बहुत खुश हूं। इसके अलावा यह मेरे लिए बाद में बग का कारण बन सकता है। –