基于Node.js的Javascript FAB框架

20

我看到一张幻灯片介绍了一个名为Fab的node.js框架。

Fab slide

这是JavaScript吗?

有人能解释下那段代码在做什么吗?

我完全不明白。


http://blip.tv/jsconfeu/jed-schmidt-getting-functional-with-fab-4399811 - clyfe
2个回答

23

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

输出:

函数:Foo
正则表达式:/bar/
字符串:baz!

@Harmen..请这样做。不想只给你一个人荣誉 =) - never_had_a_name

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接