चर

2011-04-30 8 views
13

से नए जावास्क्रिप्ट वस्तु बनाने मैं जावास्क्रिप्ट में एक नई वस्तु (सरल वंशानुक्रम का उपयोग) ऐसी है कि वस्तु के वर्ग एक चर से परिभाषित किया गया है बनाने के लिए चाहते हैं?चर

उत्तर

29

आप की तरह

function Person(){}; 
var name = 'Person'; 
var inst = new this[name] 

कुछ कर सकते हैं कुंजी बस उद्देश्य यह है कि समारोह निर्माता है कि मालिक संदर्भित कर रहा है। यह वैश्विक दायरे में ठीक काम करता है लेकिन यदि आप किसी फ़ंक्शन के अंदर कोड को डंप कर रहे हैं, तो आपको संदर्भ बदलना पड़ सकता है क्योंकि this शायद काम नहीं करेगा।

संपादित: पास करने के लिए पैरामीटर:

function Person(name){alert(name)}; 
var name = 'Person'; 
var inst = new this[name]('john') 
+0

+1 बहुत अच्छा औसत – alex

+0

धन्यवाद! मैं पैरामीटर कैसे पास करूं? – yee379

+1

आप पैरामीटर पास करने के लिए 'लागू' का भी उपयोग कर सकते हैं, जो उपयोगी है अगर आप उन्हें पहले से नहीं जानते हैं, a.g. 'यह [नाम] .apply (शून्य, तर्क) 'जहां तर्क पैरामीटर/तर्कों की एक सरणी है। कार्यों को गतिशील रूप से कॉल करते समय मामले की तुलना में अधिक बार लगता है। –

-3

यह बात वास्तव में उपयोगी है जब मैं जावास्क्रिप्ट में विभिन्न विरासत पैटर्न में मिल गया था। उदाहरण कोड दूसरे लिंक में शामिल है (वीडियो इसे पेश करता है)।

http://alexsexton.com/?p=94

http://alexsexton.com/inheritance/demo/

http://alexsexton.com/?p=51

6

यहाँ कैसे मैं यह कर रहा है। मध्यस्थ के जवाब के समान।

var className = 'Person' 
// here's the trick: get a reference to the class object itself 
// (I've assumed the class is defined in global scope) 
var myclass = window[className]; 
// now you have a reference to the object, the new keyword will work: 
var inst = new myclass('params','if','you','need','them'); 
+0

बेहद सहायक है। धन्यवाद। और यह मेडर के उत्तर से बेहतर है, क्योंकि आप पैरेंट फ़ंक्शन में पैरामीटर के रूप में 'className' को पास कर सकते हैं और इस तरह निहितार्थ की विधि के कारण इसे किसी भी वर्ग के साथ उपयोग कर सकते हैं। कम से कम, जिस तरह से मैंने इसे स्थापित किया है। – BarryMode

-1

मैं Node.js में एक ऐसी ही समस्या थी, जब मैं गतिशील डेटा के आधार पर अलग हैंडलर वस्तुओं को बनाने के लिए किया था। सबसे पहले मैंने सभी उपलब्ध हैंडलर एकत्र किए, जिन्हें एक ऑब्जेक्ट में अलग मॉड्यूल के रूप में लागू किया गया था। एक साधारण मामले में यह इस तरह हार्डकोड किया जा सकता है।

var handlers = { 
    handlerX : require('HandlerX'), 
    handlerY : require('HandlerY') 
}; 

फिर, जब भी मैं एक हैंडलर का दृष्टांत था, मैं इसे इस तरह से किया था:

var handlername = getHandlerName() 
var handler = new handlers[handlername](); 

बेशक यह तभी काम करता है आप जानते हैं, या प्रोग्राम के रूप में सभी वस्तुओं आप करेंगे की सूची निर्धारित कर सकते हैं बनाने की जरूरत है।

एक समारोह का उपयोग कर आह्वान करने के लिए::

0

मेडर से ऊपर जवाब पर सुधार करने के लिए उदाहरण के लिए

आप बस 'इस' वर्ग की बात कर रहे युक्त गुंजाइश के साथ की जगह लेंगे, अगर वर्ग वैश्विक दायरे में नीचे लिखा गया है:

function Person(name){alert(name)}; 
var name = 'Person'; 

function classMaker(){ 
    var inst = new window[name]('john'); 
} 

classMaker();