2012-04-14 16 views
6

मेरे पास निम्न कोड है और मैं सोच रहा हूं कि आखिरी पंक्ति का काम कैसे करें। मैंने एपीआई का एक सेट अपनाना है कि वर्तमान उपयोग _view नाम के सम्मेलन के रूप में जोड़ा गया है और इसके बजाय arc.view जैसे कुछ का उपयोग करेगा। $ Function_name। THXजावास्क्रिप्ट विंडो ऑब्जेक्ट पर एक फ़ंक्शन कॉलिंग

var arc={}; 
arc.view={ 
    say_hello: function(){ 
    alert("I want to say hello"); 
    } 
} 
function say_goodbye(){ 
    alert("goodbye to you"); 
} 

arc.view.say_hello(); // works 
window['say_goodbye'](); // works 
// possible to make this work? 
window['arc.view.say_hello'](); 
+2

आपके कारण मैं सफलता के साथ अपने पूरे संघर्ष दिवस को समाप्त कर रहा हूं ... धन्यवाद +1 –

+0

@vikasdevde :) thumbs up ... +1 – agpt

उत्तर

10
window['arc']['view']['say_hello'](); 

या

window.arc.view.say_hello() 

या

window['arc'].view['say_hello']() 

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

jsFiddle

window["arc"]["view"]["say_hello"](); 
3

इस प्रयास करें arc.view.say_hello कहा जाता है, और ऑब्जेक्ट view में कोई फ़ंक्शन नहीं है (यह ऑब्जेक्ट arc ऑब्जेक्ट की एक संपत्ति है)। अधिक स्पष्ट होने के लिए:

window["arc.view.say_hello"] = function() { alert("hi") }; 

window["arc.view.say_hello"](); // "hi" 

आप जिस तरह से आप वर्णित में एक समारोह कॉल करना चाहते हैं, तो आप वस्तुओं श्रृंखला "हल" करने के लिए है। आप इसके लिए एक उपयोगिता समारोह बना सकते हैं। कुछ की तरह:

var arc={}; 
arc.view={ 
    say_hello: function(){ 
    alert("I want to say hello"); 
    } 
} 
function say_goodbye(){ 
    alert("goodbye to you"); 
} 

function call(id) { 
    var objects = id.split("."); 
    var obj = this; 

    for (var i = 0, len = objects.length; i < len && obj; i++) 
     obj = obj[objects[i]]; 

    if (typeof obj === "function") 
     obj(); 
} 

call("say_goodbye"); 
call("arc.view.say_hello"); 

तुम भी उपयोगिता समारोह का विस्तार कर सकता है arguments उपयोग करने के लिए (या तुम सिर्फ समारोह के संदर्भ में लौट सकता है)।

2

वर्ग कोष्ठक अंकन आप वास्तव में खिड़की में एक समारोह निष्पादित करने के लिए पूछ रहे हैं का उपयोग करना:

var dynamicMethodName = someObject.getMethodName(); 
someOtherObject[dynamicMethodName](); 

या

someOtherObject["a key string with spaces and {special characters}"](); 
संबंधित मुद्दे