2010-09-26 101 views
19

我見過一張展示​​的幻燈片,它是一個node.js框架。Node.js上的Javascript FAB框架

Fab slide

這是JavaScript的?

有人可以解釋在該代碼中發生了什麼嗎?

我都迷路了。

+0

http://blip.tv/jsconfeu/jed-schmidt-getting-functional-with-fab-4399811 – clyfe 2012-01-01 22:15:13

回答

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 2010-09-26 18:54:42

+0

@ Harmen ..那。不想只給你一個信譽=) – 2010-09-26 19:33:01

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