2010-09-26 32 views
19

He visto una diapositiva que presenta Fab, un framework node.js.Marco de JavaScript FAB en Node.js

Fab slide

¿Es este JavaScript?

¿Podría alguien explicar qué está pasando en ese código?

Estoy perdido.

+0

http://blip.tv/jsconfeu/jed-schmidt-getting-functional-with-fab-4399811 – clyfe

Respuesta

22

Es JavaScript simple, es una función de que encadena patrón.

La primera línea, (fab = require("fab")) incluye la función fab y le devuelve una referencia.

Todos los paréntesis posteriores son llamadas a función, cada invocación de función devuelve probablemente la misma función una y otra vez.

El patrón probablemente se parece a este ejemplo simplificado:

var foo = function (arg) { 
    // detect what the argument is 
    if (typeof arg == 'function') { 
    // do something with arg 
    console.log('function: '+arg()); 
    } else if (arg instanceof RegExp) { 
    // arg is a RegExp... 
    console.log('A RegExp: '+arg); 
    } else if (typeof arg == "string") { 
    // arg is a string 
    console.log('A string: '+arg); 
    } 
    return foo; // return a reference to itself 
}; 

(foo) 
    (function() { return "Foo "; }) 
    (/bar/) 
    (" baz!"); 

Salidas:

 
function: Foo 
A RegExp: /bar/ 
A string: baz! 
+0

creo que deberíamos combinar nuestras respuestas ... – Harmen

+0

@ Harmen..do eso. No quiero dar solo uno de ustedes, cred =) –

9

Eso es difícil de seguir de hecho; en realidad no parece Javascript en absoluto ...

De todos modos, FAB aprovecha la devolución de un puntero a la función que se llamó. Por ejemplo:.

function doSomething(str){ 
    alert(str); 
    return arguments.callee; 
} 

// Alerts 'hi' and then 'there' 
doSomething('hi')('there'); 

Por supuesto se puede aplicar condiciones adicionales, como contar el número de argumentos o control del tipo de argumentos pasados ​​Por ejemplo:

function doSomething(){ 
    if(arguments.length == 1){ 
    alert(arguments[0]) 
    } 
    else if(arguments.length == 2){ 
    alert(arguments[0] + arguments[1]); 
    } 

    return arguments.callee; 
} 

doSomething 
    ("Hi, 3 + 4 is:") 
    (3, 4); 

El ejemplo últimas alertas:

> Hi, 3 + 4 is: 
> 7 
Cuestiones relacionadas