2011-08-18 11 views
12

जावास्क्रिप्ट में किसी ऑब्जेक्ट में फ़ंक्शन जोड़ने के इन दो तरीकों के बीच कोई अंतर है? क्या किसी भी कारण से बेहतर है?जावास्क्रिप्ट ऑब्जेक्ट में फ़ंक्शन जोड़ने के विभिन्न तरीके

function ObjA() { 
    this.AlertA = function() { alert("A"); }; 
} 
ObjA.prototype.AlertB = function() { alert("B"); }; 

var A = new ObjA(); 
A.AlertA(); 
A.AlertB(); 
+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/422476/javascript-setting-methods-through-prototype-object-or-in-constructor-differenc –

+0

वास्तव में डुप्लिकेट, धन्यवाद। –

+0

संभावित डुप्लिकेट [जावास्क्रिप्ट में 'प्रोटोटाइप' बनाम 'यह' का उपयोग?] (Http://stackoverflow.com/questions/310870/use-of-prototype-vs-this-in-javascript) – user2864740

उत्तर

16

निश्चित रूप से कोई अंतर है। यदि आप this.AlertA को परिभाषित करते हैं, तो आप ObjA के उदाहरण के लिए स्थानीय विधि को परिभाषित कर रहे हैं। यदि आप ObjAकन्स्ट्रक्टर के प्रोटोटाइप में AlertA जोड़ते हैं, तो यह ObjA के प्रत्येक इंस्टेंस के लिए परिभाषित किया गया है। उत्तरार्द्ध, इस मामले में, अधिक कुशल है, क्योंकि यह केवल एक बार असाइन किया जाता है, जबकि प्रत्येक बार जब आप ObjA का उदाहरण बनाते हैं तो एक स्थानीय विधि असाइन की जाती है। विधि AlertA जोड़ने के लिए निर्माता

var A = new ObjA, 
    B = new ObjA, 
    C = new ObjA; 
ए, बी और सी के लिए

गया है:

तो में this.AlertA का उपयोग कर। दूसरी तरफ AlertB, केवल एक बार जोड़ा जाता है। आप देख सकते हैं कि का उपयोग करते हुए:

function ObjA() { 
     alert('adding AlertA!'); 
     this.AlertA = function() { 
      alert("A"); 
     }; 

     if (!ObjA.prototype.AlertB) { 
      alert('adding AlertB!'); 
      ObjA.prototype.AlertB = function() { 
       alert("B"); 
      }; 
     } 
} 

var A = new ObjA, //=> alerts adding AlertA! and alerts adding AlertB! 
    B = new ObjA, //=> alerts adding AlertA! 
    C = new ObjA; //=> alerts adding AlertA! 
3

वस्तु निर्माता का उपयोग करते हुए अपने वस्तु के हर नया उदाहरण है कि समारोह की एक प्रति प्रदान करेंगे। प्रोटोटाइप का उपयोग करने से परिणामस्वरूप सभी कार्यों में एक फ़ंक्शन साझा किया जा सकेगा।

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