【问题标题】:Javascript FAB framework on Node.jsNode.js 上的 Javascript FAB 框架
【发布时间】:2011-04-17 11:42:02
【问题描述】:

我看过一张幻灯片,展示了 Fab,一个 node.js 框架。

这是 JavaScript 吗?

有人能解释一下这段代码发生了什么吗?

我都迷路了。

【问题讨论】:

标签: javascript node.js chaining floating-action-button


【解决方案1】:

是纯 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..这样做。不想只给你们中的一个人信任 =)
【解决方案2】:

这确实很难理解;它看起来根本不像 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

【讨论】:

    猜你喜欢
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 2016-01-08
    • 1970-01-01
    • 2011-07-30
    • 2013-02-19
    相关资源
    最近更新 更多