【问题标题】:why does this object declaration work in node.js and how to declare a static variable?为什么这个对象声明在 node.js 中起作用以及如何声明一个静态变量?
【发布时间】:2012-01-16 14:17:08
【问题描述】:

我看过这段代码:

var myNet = require ("net");

在某些功能中:

function foo (x,y) {
    var myNewNet = new myNet();      
    myNewNet.createServer(x,y);

}

为什么上面的代码会创建一个新对象?这背后的机制是什么?

还有一个问题,我如何在 node.js 中创建一个静态变量,例如一个必须唯一的 id 号。

我为静态变量提供了这个选项:

var id =0;

放到全局作用域上,可以吗?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    require 语句基本上就像一个导入;它需要一个外部库并使其在您的代码中可用。

    如果您查看外部模块,您会注意到它只是普通的 node.js js 代码。它有EXPORT 语句。当您需要某些东西时,这些语句就可以使用。查看http://howtonode.org/creating-custom-modules

    node.js 中有一个 GLOBAL 关键字,您可以使用它来制作全局内容

    GLOBAL.IP_ADDRESS = "..."

    正如@Raynos 所说,这样做通常不是一个好主意,因此另一种选择是从模块中导出一个常量,这样您就可以创建一个模块并执行此操作

    exports.STATIC_CONSTANT = "";

    然后一旦你导入模块,你就可以做

    var mod = require('mymodule');
    mod.STATIC_CONSTANT;
    

    编辑,回答你的评论,行

    var myNet = require("net")

    使myNet 成为net 模块导出的任何内容。一定是导出函数,所以

    var newNet = new myNet()

    创建网络对象的新实例。从那里开始

    myNewNet.createServer()

    只是在你刚刚创建的对象上调用一个方法。

    【讨论】:

    • 谢谢,但为什么语法:var required = require("someModule"); var newVar = new required();没问题,为什么它完全有效?
    • 全局变量是邪恶的。 永远不要在节点中使用全局变量
    猜你喜欢
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 2019-02-13
    • 2020-08-10
    • 1970-01-01
    • 2018-07-16
    相关资源
    最近更新 更多