2010-02-19 13 views
20

मैं अपने जावास्क्रिप्ट कन्स्ट्रक्टर के निर्माता से एक विधि कॉल करने का प्रयास कर रहा हूं, क्या यह संभव है और यदि ऐसा है, तो मुझे यह काम नहीं मिल रहा है, कोई अंतर्दृष्टि होगी महान! धन्यवाद!जावास्क्रिप्ट कन्स्ट्रक्टर में एक विधि को कॉल करना और इसके चर का उपयोग

function ValidateFields(pFormID){ 
    var aForm = document.getElementById(pFormID); 
    this.errArray = new Array();//error tracker 
    this.CreateErrorList(); 
} 
/* 
* CreateErrorList() 
* Creates a list of errors: 
* <ul id="form-errors"> 
* <li> 
*  You must provide an email. 
* </li> 
* </ul> 
* returns nothing 
*/ 
ValidateFields.prototype.CreateErrorList = function(formstatid){ 
    console.log("Create Error List"); 
} 

संपादित

मैं यह क्या ऊपर है के साथ काम मिल गया है, लेकिन मैं CreateErrorList समारोह में 'errArray' चर का उपयोग नहीं कर पा रहे।

+1

पायथनिस्ट जो यहां भूमि: जावास्क्रिप्ट में किसी ऑब्जेक्ट को प्रारंभ करना 'नए' कीवर्ड के साथ किया जाना है। – sauerburger

उत्तर

13

हाँ, यह संभव है, अपने निर्माता फ़ंक्शन निष्पादित जब, this मूल्य पहले से ही [[Prototype]] आंतरिक संपत्ति ValidateFields.prototype वस्तु की ओर इशारा करते हैं।

अब, अपने संपादन को देखकर, errArray वैरिएबल CreateErrorList विधि के दायरे में उपलब्ध नहीं है, क्योंकि यह केवल निर्माता के दायरे में ही सीमित है।

आप निजी इस चर रखने के लिए और केवल CreateErrorList विधि इसे उपयोग करने की अनुमति की जरूरत है, आप एक विशेषाधिकार प्राप्त विधि के रूप में यह परिभाषित कर सकते हैं निर्माता के भीतर:

function ValidateFields(pFormID){ 
    var aForm = document.getElementById(pFormID); 
    var errArray = []; 

    this.CreateErrorList = function (formstatid){ 
    // errArray is available here 
    }; 
    //... 
    this.CreateErrorList(); 
} 

नोट विधि , क्योंकि यह this से जुड़ा हुआ है, साझा नहीं किया जाएगा और यह ValidateFields के सभी ऑब्जेक्ट उदाहरणों पर भौतिक रूप से मौजूद होगा।

//.. 
this.errArray = []; 
//.. 

और जानकारी:

एक अन्य विकल्प है, अगर आप, errArray चर के लिए एक सार्वजनिक अपने वस्तु उदाहरणों की संपत्ति के रूप कोई आपत्ति नहीं है, तो आप सिर्फ this वस्तु को असाइन करने के लिए है :

+0

में 'errArray' चर का उपयोग नहीं कर सकता हूं कुछ और शोध के बाद I पता चला कि 'गलती' के सामने यह महत्वपूर्ण कार्य होना चाहिए ताकि यह अन्य तरीकों के लिए उपलब्ध हो। मैं इसके साथ आपकी मदद की सराहना करता हूं। – alvincrespo

0

क्या आप कहीं ValidateFields का ऑब्जेक्ट बना रहे हैं?

संपादित करें: आपको किसी फ़ंक्शन की सार्वजनिक संपत्तियों का जिक्र करते समय this को पूर्ववत करने की आवश्यकता है।

यहाँ कोड अपडेट किया गया: http://jsbin.com/afiru/edit

+0

हां ... मैं http: // jsbin हूं।com/afiru/2/संपादित करें हालांकि, मुझे अपने प्रश्न को फिर से लिखना चाहिए, मुझे अंततः इसे ऊपर की तरह काम करने के लिए मिला है, लेकिन किसी कारण से मैं CreateErrorList – alvincrespo

6

समाधान:

function ValidateFields(pFormID){ 
    console.log("ValidateFields Instantiated"); 
    var aForm = document.getElementById(pFormID); 
    this.errArray = new Array();//error tracker 
    this.CreateErrorList(); //calling a constructors method 
} 

ValidateFields.prototype.CreateErrorList = function(){ 
    console.log("Create Error List"); 
    console.log(this.errArray); //this is how to access the constructors variable 
} 

आशा इस किसी को जो भविष्य में इस तरह एक सवाल हो सकता है मदद करता है।

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