Node.js 上的 Javascript FAB 框架

发布于 2024-09-25 03:51:55 字数 233 浏览 10 评论 0原文

我看过一张幻灯片,其中介绍了 Fab,一个 Node.js 框架。

Fab slip

这是 JavaScript 吗?

有人可以解释一下该代码中发生了什么吗?

我全迷路了。

I've seen a slide that presented Fab, a node.js framework.

Fab slide

Is this JavaScript?

Could someone explain what is going on in that code?

I'm all lost.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

逆流 2024-10-02 03:51:55

是纯 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!

Is plain JavaScript, it is a function chaining pattern.

The first line, ( fab = require("fab") ) includes the fab function and returns a reference to it.

All the subsequent parentheses are function calls, each function invocation returns probably the same function again and again.

The pattern probably looks like this simplified example:

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

Outputs:

function: Foo
A RegExp: /bar/
A string: baz!
感性 2024-10-02 03:51:55

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

That's hard to follow indeed; it doesn't really look like Javascript at all...

Anyway, FAB takes advantage of returning a pointer to the function which was called. For example:

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

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

Of course you can implement extra conditions, like counting the number of arguments or checking the type of arguments passed in. For example:

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

The last example alerts:

> Hi, 3 + 4 is:
> 7
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文