2010-07-18 24 views
5

Así que la versión corta, lo que no entiendo es esta línea de código:¿función vacía de Javascript? Qué significa eso?

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

La versión larga, mira a estas funciones:

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); 
       } 
      })(); 
     }; 

Este código es de Raphael parque infantil, el cual significa que implementa la biblioteca raphael. Por lo que la línea de código en la parte superior que no entiendo (que está dentro de la expresión try/catch), supone que copiar el código que el usuario ingrese que se almacena en el interior cd.value en la función. Pero, ¿cómo es posible?

se puede visitar la página aquí: http://raphaeljs.com/playground.html

Respuesta

2

La función de constructor de la clase

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

Esta construcción evalúa el código como una cadena, y es mucho más lenta que la asignación de funciones anónimas. Solo debe usarse en lugares donde realmente se necesita. constructor de la clase

la función con parámetros

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

Parece que cd.value() proporciona una cadena con código javascript que va a ser analizado y compilado. Más adelante se llame ...

Debe comprobar cómo el código en cd.value se parece.

1

Se trata básicamente de crear un nuevo objeto de función con un cuerpo dinámico ... la mejor manera que puedo explicarlo es así:

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

Aquí es un recurso para leer más: http://www.permadi.com/tutorial/jsFunc/index.html

1

La función Function crea una nueva instancia de función con el último parámetro como el código de la función.

Así que básicamente hace lo mismo que:

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

El método call simplemente llama a la función con los elementos de la matriz paper de argumentos.

1

Los argumentos a Function son los parámetros con nombre de la función, y luego el cuerpo de la función. En este caso, usted tiene un elemento cuyo id es code y el atributo value en ese elemento es algo de código Javascript.Considere que tiene este código HTML en algún lugar de su documento:

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

    alert(a+b); 
</textarea> 

Ahora, el código de ejemplo, si se ejecuta contra este elemento code, crearía la siguiente función:

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

    alert(a+b); 
} 

Puede echar un vistazo a the Mozilla Development Center's docs on Function para obtener una explicación más completa sobre cómo funciona el objeto Function.

Cuestiones relacionadas