2012-04-27 8 views
5

नीचे स्निपेट पर एक नज़र डालें। क्या मार्ग बनाने के लिए ... की जगह में कोई भी फ़ंक्शन लिख सकता है, जिसे किसी अन्य फ़ंक्शन में पुन: उपयोग किया जा सकता है? var route = this.show.fullyQualifiedName की तरह कुछ?जावास्क्रिप्ट: इसके भीतर से पूरी तरह से योग्य कार्य नाम प्राप्त करना?

var services = { 
    'github.com': { 
     api: { 
      v2: { 
       json: { 
        repos: { 
         show: function(username, fn) { 
          var route = ...; 
          // route now == 'github.com/api/v2/json/repos/show' 

          route += '/' + username; 

          return $.getJSON('http://' + route).done(fn); 
         } 
        } 
       } 
      } 
     } 
    } 
} 
+0

मुझे नहीं लगता कि शीर्ष-डाउन खोज संभव है। खोज को तब तक कैसे पता चलेगा जब तक कि यह उसका मिलान नहीं मिल जाता है जब तक कि मैंने इसे 'शो' के पूर्ण पथ के साथ प्रदान नहीं किया हो? और अगर मैंने इसे 'शो' के पूर्ण पथ के साथ प्रदान किया है, जो कि एक ही फ़ंक्शन का उपयोग करने के बिंदु को हरा देता है तो मुझे 'शो' मान को किसी भी विधि के अंदर से 'रूट' मान प्राप्त होता है जैसे मैं परिभाषित करता हूं। – barfoo

+0

आपको फिर से फ़ंक्शन को कॉल करने के लिए पेड़ (केवल एक बार) भरना होगा _before_। – Alnitak

उत्तर

3

नहीं, कम से कम "प्रतिबिंब" शैली संचालन का उपयोग नहीं कर रहा है।

ऑब्जेक्ट्स को उन ऑब्जेक्ट्स के नाम का कोई ज्ञान नहीं है, जिनमें वे शामिल हैं, कम से कम नहीं क्योंकि एक ही वस्तु (संदर्भ) कई ऑब्जेक्ट्स के भीतर निहित हो सकती है।

एक ही तरीका है कि आप यह कर सकता है शीर्ष वस्तु पर जैसे: शुरू करने और अंदर की ओर अपने तरीके से काम करने के लिए, .:

function fillRoutes(obj) { 
    var route = obj._route || ''; 
    for (var key in obj) { 
     if (key === '_route') continue; 
     var next = obj[key]; 
     next._route = route + '/' + key; 
     fillRoutes(next); 
    } 
} 

जो प्रत्येक वस्तु है कि उस वस्तु का पथ है में एक नया _route संपत्ति रखा जाएगा होगा।

http://jsfiddle.net/alnitak/WbMfW/

1

आप एक पुनरावर्ती खोज नहीं कर सकते हैं, एल्निटैक की तरह कहा देखें, लेकिन आप एक टॉप-डाउन खोज कर सकता है, हालांकि यह अपने वस्तु के आकार के आधार पर कुछ हद तक धीमी गति से हो सकता है। आप वस्तु के गुणों के माध्यम से लूप करेंगे, यह देखने के लिए जांच कर रहे हैं कि इसमें बच्चे हैं या नहीं। यदि उसके पास कोई बच्चा है, उस के माध्यम से लूप, आदि। जब आप एक श्रृंखला के अंत तक पहुंचते हैं और आपको अपना काम नहीं मिला है, तो अगले बच्चे को जाएं और खोज जारी रखें।

अब एक उदाहरण लिखने का समय नहीं है, लेकिन उम्मीद है कि आप इससे कुछ टुकड़ा कर सकते हैं।

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