2010-08-22 14 views
17

मैं किसी ऑब्जेक्ट के भीतर से MyMethod फ़ंक्शन को कॉल करने का प्रयास कर रहा हूं लेकिन नीचे दिए गए वाक्यविन्यास में से कोई भी काम नहीं करता है। नीचे वास्तव में एक स्पष्ट त्रुटि होनी चाहिए लेकिन मैं इसे नहीं देख सकता।जावास्क्रिप्ट - आप उस कक्षा के भीतर से कक्षा के अंदर फ़ंक्शन कैसे कॉल करते हैं?

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 

    <script type="text/jscript"> 

    function MyObject() { 

     //how do I get one of these to work?? 
     this.MyMethod; //does not work 
     this.MyMethod(); //does not work either 
     MyMethod(); //does not work either 

     this.MyMethod = function() { 
     alert('It works'); 
     } 
    } 

    var test = new MyObject(); 

    </script> 

</head> 
<body> 

</body> 
</html> 
+1

आप अपने कोड के इस हिस्से को स्थानांतरित कर सकते हैं कि "this.MyMethod = function() { चेतावनी ('यह काम करता है');" विधि कॉल ऊपर MyMethod के लिए? और देखें कि क्या इससे कोई फर्क पड़ता है? – InSane

उत्तर

21

दो मुख्य समस्याओं

  1. MIME प्रकार text/javascript, नहीं text/jscript
  2. आप के बाद विधि परिभाषित कर रहे हैं आप इसे

तो फोन करने की कोशिश होती है:

function MyObject() { 
    this.MyMethod = function() { 
     alert('It works'); 
    } 
    this.MyMethod(); //should now work 
    } 

    var test = new MyObject(); 
+0

http://ejohn.org/apps/learn/#6 – sova

2

आपने जावास्क्रिप्ट क्लास के निर्माता के अंदर निजी विधि को कॉल किया है। उस बिंदु में कार्य अभी तक

प्रारंभ नहीं कर रहे हैं लेकिन यदि आप ऐसा तरह वस्तु को प्रारंभ:

var test = new MyObject(); 

और फिर ऐसा करते हैं:

test.myMethod(); 

यह काम करेंगे।

-2

मुझे यकीन है कि आप फ़ाइल में कहीं भी विधियों को परिभाषित कर सकते हैं, भले ही आप उन्हें कॉल कर सकें, लेकिन जिस तरह से आप विधि को परिभाषित कर रहे हैं वह दोष है।

http://ejohn.org/apps/learn/#5

सूचना है कि अगर आप के रूप में यह मूल्य है एक गुमनाम समारोह के साथ एक चर को परिभाषित तो आप (क्योंकि यह एक नहीं है) नाम से समारोह कॉल करने के लिए सक्षम नहीं हैं। इसके बजाय आप सम्मेलन

function nameOfTheFunction(arguments) { 
... 
} 

मैंने पाया का उपयोग कर नीचे दिए गए लिंक इच्छा बहुत उपयोगी हो करने के लिए यह नाम रखना चाहिए:

http://www.dustindiaz.com/javascript-function-declaration-ambiguity/

+1

दोष विधि परिभाषित करने का तरीका नहीं है, जब विधि परिभाषित की जाती है तो दोष होता है। –

0
var MyObject = function MyObject() { 
     this.MyMethod = function() { 
     alert('It works'); 
     } } 

var test = new MyObject(); test.MyMethod(); 

ऊपर करेंगे। या आप केवल एक कन्स्ट्रक्टर बना सकते हैं और इसके अंदर इस विधि को कॉल कर सकते हैं। तो वस्तु निर्माण के समय यह this.MyMethod()

1

को परिभाषित एक समारोह विभिन्न accessibilities

प्रथम प्रदान करते हैं कि उसे अपने जनक समारोह की संपत्ति की स्थापना के 2 तरीके, के रूप में किया जाता है फोन करेगा " ए "नीचे आपकी लिपि का संस्करण। यदि आप ऐसा करते हैं, तो के बाद फ़ंक्शन केवल उपयोग करने योग्य है।

दूसरा, "फ़ंक्शन फ़ंक्शननाम() {...}" के शास्त्रीय दृष्टिकोण के साथ फ़ंक्शन को परिभाषित करना। यह परिभाषा "hoisting" से गुजरती है, जिसका अर्थ यह है कि फ़ंक्शन मूल ऑब्जेक्ट में उपलब्ध हो जाता है, यानी यह परिभाषित स्थान से ऊपर भी है। आप इसे मूल पोस्टर के कोड के आधार पर नीचे दिए गए नमूने में "बी" संस्करण में देख सकते हैं।इसके अलावा https://jsfiddle.net/dnL4j30u/

<script> 
    function MyObject() { 

    MyMethod(); 

    this.MyMethod = function() { 
     console.log('It works A'); 
    } 

    this.MyMethod(); 

    MyMethod(); 

    function MyMethod() { 
     console.log('It works B'); 
    } 

    } 
    var test = new MyObject(); 
</script> 

पर उत्पादन

It works B  (this works because the second definition gets hoisted) 
It works A 
It works B 
संबंधित मुद्दे