2010-07-18 17 views
5

तो छोटा संस्करण, जो मुझे समझ में नहीं आता है कोड की यह पंक्ति है:खाली जावास्क्रिप्ट समारोह? इसका क्या मतलब है?

(new Function("paper", "window", "document", cd.value)).call(paper, paper); 

लंबा संस्करण, इन कार्यों को देखें:

window.onload = function() { 
      var paper = Raphael("canvas", 640, 480); 
      var btn = document.getElementById("run"); 
      var cd = document.getElementById("code"); 

      (btn.onclick = function() { 
       paper.clear(); 
       paper.rect(0, 0, 640, 480, 10).attr({fill: "#fff", stroke: "none"}); 
       try { 
        (new Function("paper", "window", "document", cd.value)).call(paper, paper); 
       } catch (e) { 
        alert(e.message || e); 
       } 
      })(); 
     }; 

यह कोड राफेल खेल का मैदान है, जिसका अर्थ है यह राफेल लाइब्रेरी लागू करता है। तो शीर्ष पर कोड की एक पंक्ति जिसे मैं समझ नहीं पा रहा हूं (यह कोशिश/पकड़ अभिव्यक्ति के अंदर है), उस उपयोगकर्ता को दर्ज करने के लिए मान लें जो उस उपयोगकर्ता को दर्ज करता है जो फ़ंक्शन में cd.value के अंदर संग्रहीत है। लेकिन यह कैसे संभव है?

आप यहां पेज देख सकते हैं: http://raphaeljs.com/playground.html

उत्तर

4

आप कार्य करें:

function (paper, window, document) where {} = cd.value; 

यहाँ एक संसाधन को पढ़ने के लिए और भी है समझें कि new Function() क्या करता है? यह eval() के समान है जिसमें यह जावास्क्रिप्ट कोड की एक स्ट्रिंग लेता है - यह फ़ंक्शन को परिभाषित करने के लिए उस स्ट्रिंग का उपयोग करता है। तो लाइन आप पोस्ट कर के बराबर होगा:

(function(paper,window,document){ 
    /* the code in the cd.value string goes here */ 
}).call(paper,paper);

और जानकारी: https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Function

2

समारोह वर्ग निर्माता

functionName = new Function("function code should be written here");

यह निर्माण एक स्ट्रिंग के रूप कोड मूल्यांकन करती है और अनाम प्रक्रियाएं बताए तुलना में बहुत धीमी है:

आप यहाँ पृष्ठ पर जा सकते। इसका उपयोग केवल उन जगहों पर किया जाना चाहिए जहां इसकी वास्तव में आवश्यकता है। मापदंडों

functionName = new Function("varName","varName2","etc.","function code");

ऐसा लगता है कि cd.value() जावास्क्रिप्ट कोड है कि पार्स और संकलित किया जा रहा है के साथ एक स्ट्रिंग प्रदान करता है की तरह साथ

समारोह वर्ग निर्माता। बाद में आप इसे कॉल करें ...

आपको यह जांचना चाहिए कि cd.value में कोड कैसा दिखता है।

1

यह मूल रूप से एक गतिशील शरीर ... सबसे अच्छा तरीका है मैं यह व्याख्या कर सकते हैं के साथ एक नया समारोह वस्तु बनाने है इस तरह है: http://www.permadi.com/tutorial/jsFunc/index.html

1

Function समारोह समारोह के कोड के रूप में पिछले पैरामीटर के साथ एक नया कार्य उदाहरण पैदा करता है।

eval("function(paper,window,document){"+cd.value+"}").call(paper, paper); 

call विधि बस तर्क के लिए paper सरणी में आइटम के साथ समारोह कॉल:

तो यह मूल रूप से के रूप में ही है।

1

Function के तर्क फ़ंक्शन के नामित पैरामीटर हैं, और फिर फ़ंक्शन का मुख्य भाग हैं। इस मामले में, आपके पास एक तत्व है जिसका आईडी code है और उस तत्व पर value विशेषता कुछ जावास्क्रिप्ट कोड है।विचार करें कि आप अपने दस्तावेज़ में कहीं न कहीं इस HTML है:

function(paper, window, document) { 
    var a = "foo"; 
    var b = "bar"; 

    alert(a+b); 
} 

आप पर एक नज़र ले जा सकते हैं:

<textarea id="code"> 
    var a = "foo"; 
    var b = "bar"; 

    alert(a+b); 
</textarea> 

अब, अपने कोड उदाहरण के लिए, अगर यह code तत्व के खिलाफ चलाने के लिए, निम्नलिखित समारोह बनाना होगा Function ऑब्जेक्ट कैसे काम करता है इस बारे में एक पूर्ण स्पष्टीकरण प्राप्त करने के लिए the Mozilla Development Center's docs on Function

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