2008-09-30 16 views

उत्तर

70

ज़रूर:

function getMethods(obj) { 
    var result = []; 
    for (var id in obj) { 
    try { 
     if (typeof(obj[id]) == "function") { 
     result.push(id + ": " + obj[id].toString()); 
     } 
    } catch (err) { 
     result.push(id + ": inaccessible"); 
    } 
    } 
    return result; 
} 

यह का उपयोग करना:

alert(getMethods(document).join("\n")); 
+2

कोशिश/पकड़ एक अच्छा दृष्टिकोण है। आईई में कुछ संपत्ति/विधियां हैं जो पहुंच पर त्रुटि देगी। – scunliffe

+0

हाँ, मुझे लगता है कि कुछ फ़ायरफ़ॉक्स में भी हैं। – troelskn

+0

ध्यान दें कि यह कुछ अंतर्निहित वस्तुओं पर काम नहीं करता है जैसे दिनांक: 'var a = new date(); console.log (टाइप करें ए, getMethods (ए)); ' रिटर्न: ' ऑब्जेक्ट [] '। – FGM

6

यहां JS reflection पर एक पोस्ट है। ऐसा करना चाहिए जो आप खोज रहे हैं।

1

here से:

उदाहरण 1:

for (var myprop in navigator){ 
document.write(myprop+": "+navigator[myprop]+"<br>") 
} 

बस की जगह 'नाविक' जो कुछ भी वस्तु के साथ आप रुचि रखते हैं: इस उदाहरण "नाविक" वस्तु के सभी गुण, साथ ही उनकी मूल्यों बाहर लिखते हैं में और आपको जाने के लिए अच्छा होना चाहिए।

टिप्पणी अनुभाग में एंथनी द्वारा उल्लिखित अनुसार - यह सभी विशेषताओं को केवल प्रश्नों के अनुसार ही नहीं देता है।

ओह! वह मुझे उस भाषा में किसी प्रश्न का उत्तर देने और जवाब देने के लिए सिखाएगा जो मुझे नहीं पता। फिर भी, मुझे लगता है कि कोड उपयोगी है - बस इतना आवश्यक नहीं था।

+0

यह सब गुण न सिर्फ सवाल के लिए कहा के रूप में तरीकों देता है। आईई पर यह केवल कुछ गुणों और किसी भी तरीके से लौटाता है। – AnthonyWJones

3

इस कोड पर एक हंस ले: -

function writeLn(s) 
{ 
    //your code to write a line to stdout 
    WScript.Echo(s) 
} 

function Base() {} 
Base.prototype.methodA = function() {} 
Base.prototype.attribA = "hello" 

var derived = new Base() 
derived.methodB = function() {} 
derived.attribB = "world"; 

function getMethods(obj) 
{ 
    var retVal = {} 

    for (var candidate in obj) 
    { 
     if (typeof(obj[candidate]) == "function") 
      retVal[candidate] = {func: obj[candidate], inherited: !obj.hasOwnProperty(candidate)} 
    } 
    return retVal 
} 

var result = getMethods(derived) 
for (var name in result) 
{ 
    writeLn(name + " is " + (result[name].inherited ? "" : "not") + " inherited") 
} 

getMethod समारोह के साथ कि क्या विधि एक है कि एक प्रोटोटाइप से विरासत में मिला दिया गया है साथ तरीकों के सेट देता है।

ध्यान दें कि यदि आप ब्राउज़र/डीओएम ऑब्जेक्ट जैसे संदर्भ से आपूर्ति की गई वस्तुओं पर इसका उपयोग करना चाहते हैं तो यह आईई काम नहीं करेगा।

0

चूंकि जावास्क्रिप्ट में विधियां केवल गुण हैं जो फ़ंक्शंस हैं, for..in लूप उन्हें अपवाद के साथ समझाएगा - यह अंतर्निहित विधियों की गणना नहीं करेगा। जहां तक ​​मुझे पता है, अंतर्निहित तरीकों की गणना करने का कोई तरीका नहीं है। और आप किसी ऑब्जेक्ट पर अपनी विधियों या गुणों की घोषणा नहीं कर सकते हैं जो इस तरह से गणना नहीं कर रहे हैं।

3

यहाँ एक ES6 नमूना है।

// Get the Object's methods names: 
function getMethodsNames(obj = this) { 
    return Object.keys(this) 
     .filter((key) => typeof this[key] === 'function'); 
} 

// Get the Object's methods (functions): 
function getMethods(obj = this) { 
    return Object.keys(this) 
     .filter((key) => typeof this[key] === 'function') 
     .map((key) => this[key]); 
} 

obj = this, एक ES6 डिफ़ॉल्ट पैरामीटर है कि आप एक वस्तु में पारित कर सकते हैं या इसे this लागू हो जाएगी।

Object.keysObject की अपनी समृद्ध गुणों का एक ऐरे देता है। window ऑब्जेक्ट पर यह [..., 'localStorage', ...'location'] वापस आ जाएगा।

(param) => ..., एक ES6 तीर समारोह है यह एक अंतर्निहित वापसी के साथ के लिए

function(param) { 
    return ... 
} 

एक आशुलिपि है।

Array.filter परीक्षण (typeof this[key] === 'function') को पार करने वाले सभी तत्वों के साथ एक नई सरणी बनाता है।

Array.map इस सरणी में प्रत्येक तत्व पर एक प्रदत्त फ़ंक्शन को कॉल करने के परिणामों के साथ एक नई सरणी बनाता है (this[key] लौटाएं)।

+0

यह उपयोगी है! एक सुधार: 'ob' के बजाय कार्यों 'obj' के अंदर उपयोग किया जाना चाहिए। –

2

यदि आप किसी ऑब्जेक्ट के अंदर क्या देखना चाहते हैं, तो आप सभी ऑब्जेक्ट की चाबियाँ प्रिंट कर सकते हैं। उनमें से कुछ चर, कुछ तरीकों से हो सकता है।

विधि, बहुत सही नहीं है, लेकिन यह बहुत जल्दी है:

console.log(Object.keys(obj)); 
+1

यह बहुत उपयोगी है। एक शर्म की बात है कि आपके जवाब को केवल एक अपवित्र मिला (मुझसे, यय)! – Christian

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

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