2010-09-26 7 views
19

Я видел слайд, который представлял Fab, инфраструктуру node.js.Javascript FAB framework на Node.js

Fab slide

Является ли это JavaScript?

Может кто-нибудь объяснить, что происходит в этом коде?

Я потерян.

+0

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

ответ

22

Простой JavaScript, это Функция цепочки модель.

Первая строка, (fab = require("fab")) включает в себя функцию fab и возвращает ссылку на нее.

Все последующие круглые скобки являются функциональными вызовами, каждый вызов функции возвращает, вероятно, одну и ту же функцию снова и снова.

картина, вероятно, выглядит как этот упрощенный пример:

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!"); 

Выходы:

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

Я думаю, мы должны объединить наши ответы ... – Harmen

+0

@ Harmen..do этого. Не хочу давать только один из них: cred =) –

9

Это трудно следовать действительно; он вообще не похож на Javascript ...

В любом случае, FAB использует возможность возврата указателя на вызываемую функцию. Например:.

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

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

Конечно, вы можете реализовать дополнительные условия, как подсчет количества аргументов или проверка типа аргументов, переданных в Например:

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

Последние примеры предупреждений:

> Hi, 3 + 4 is: 
> 7