2012-01-25 15 views
5

क्या किसी ऑब्जेक्ट से शाब्दिक रूप से एक विधि को कॉल करना संभव है?जावास्क्रिप्ट ऑब्जेक्ट शाब्दिक विधि: रिकर्सिव कॉल

उदाहरण के लिए:

(function() { 
    'use strict'; 
    var abc = ['A', 'B', 'C'], 
     obj = { 
      f: function() { 
       if (abc.length) { 
        abc.shift(); 
        f(); // Recursive call 
       } 
      } 
     }; 

    obj.f(); 
}()); 

त्रुटि: 'म' से पहले यह परिभाषित किया गया था इस्तेमाल किया गया था।

धन्यवाद।

उत्तर

1

कोई कोड नहीं है जिसे f आपके कोड में कहीं भी परिभाषित किया गया है। obj.f() (या this.f का उपयोग करें यदि आप this अंक कहां से जानते हैं)।

3

f आपकी ऑब्जेक्ट पर विधि है। नतीजतन, जब आप f में हैं, this वह ऑब्जेक्ट होगा जिस पर f संलग्न है। तो रिकर्सिवली f कॉल करने के लिए, this.f()

f: function() { 
    if (abc.length) { 
     abc.shift(); 
     this.f(); // Recursive call 
    } 
} 

का उपयोग बस f की है कि अंदर ध्यान दें, this केवल वर्तमान वस्तु हो सकता है अगर f एक विधि के रूप शुरू हो जाती है: obj.f();

आप की तरह somethinig करते हैं : obj.f.call(lala);, फिर this अब lala होगा। और अगर आप की तरह कुछ कार्य करें:

var func = obj.f; 
func(); 

अब thisf के अंदर वैश्विक वस्तु (या अपरिभाषित सख्त मोड में)

+0

'this' या करने के लिए' 'कैसे f' के आधार पर obj' बात नहीं हो सकता है कहा जाता है। इसे बाद में लड़के काटने से पहले बेहतर बनाएं। –

+0

@MattiVirkkunen - वास्तव में - संपादित। टिप के लिए धन्यवाद, और अपने नए बैज का आनंद लें :) –

+0

ये [!] (Http://stackoverflow.com/questions/9006587/javascript-object-literal-method-recursive-call) –

10

है आप कर सकते हैं, एक नामित समारोह अभिव्यक्ति का उपयोग करके:

 f: function myself() { 
      if (abc.length) { 
       abc.shift(); 
       myself(); // Recursive call 
      } 
     } 

एक होगा पढ़ें: http://kangax.github.com/nfe/

+1

यह चुना गया उत्तर होना चाहिए। लिंक के लिए भी धन्यवाद। – kliron

+0

यह एक नामित फ़ंक्शन को वास्तव में क्या बनाता है जो एरोर को सताता है? इसे अपना बंद करो? –

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