【问题标题】:Obtain all functions in a file in Node.js在 Node.js 中获取文件中的所有函数
【发布时间】:2011-06-04 13:15:35
【问题描述】:

我在一个文件中有一些函数。我正在尝试从该文件中获取该文件中的所有函数。通常,所有函数都在window 对象中,但我使用的是Node.js,它似乎没有window 对象。

假设我在文件中有类似以下内容的内容:

function foo() {}
function bar() {}

然后:

  1. 函数是否保存在某个全局对象中?
  2. 如果没有,我如何在不知道它们的名字的情况下访问这些函数?我可以遍历所有现有函数并以这种方式获取它们吗?

【问题讨论】:

  • 你试过this吗? (全局this,不在实例化类中)
  • @brettz9:​​我尝试了你的建议:function foo(){};console.log(this.foo),但它返回 undefined - 或者这不是你的意思?
  • 这是我的猜测——很惊讶它不起作用...谷歌搜索让我知道:“进程不再是全局对象。全球是。”
  • @brettz9: this.foo, global.foo, process.foo 不幸的是都未定义...

标签: javascript function node.js


【解决方案1】:

以下是常见的模式

var foo = exports.foo = function() {
    // ...
}

通过这种方式将其写入exports,您可以在本地以foo 访问它

【讨论】:

    【解决方案2】:

    您想访问当前范围对象,但在 JavaScript 中这是不可能的。

    【讨论】:

    • 我可能错了,但在浏览器中我可以访问 window 在这种情况下。这在 Node.js 中根本不可用吗?
    • 实际上你想要做的是违反所有规则,我什至听说有人因为这样的事情而被杀,即使是因为尝试......:) P.S.:我的意思是污染全球范围。
    • @bjornd:我从您的链接中了解到,这些功能是“独立全局的”,所以在这种情况下没有解决方案,对吗?
    • @pimvdb 是的,这是正确的。在当前版本的 node.js 中,你不能这样做。您无权访问 [[Scope]] 对象。
    【解决方案3】:

    你的函数被包裹在一个闭包中。请记住,节点将文件模块包装在这样的东西中

    var module = { exports: {}};
    (function(module, exports){
        // your file module content
    })(module, module.exports);
    

    他们是当地人。将函数分配给对象,exportsglobal 以枚举它们。

    【讨论】:

      猜你喜欢
      • 2012-10-09
      • 2019-05-23
      • 1970-01-01
      • 2019-05-08
      • 1970-01-01
      • 1970-01-01
      • 2010-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多