0

我有一个文件 stats.js。

它的内容是

(function () {
    func1 = function () {

    }
    func2 = function () {

    }

    module.exports = this;

}).call(this);

据说,当我这样做时

var stats = require("./stats");

我应该能够使用 stats.func1、stats.func2 获得 func1 和 func2,对吗?

好吧,我不能。stats 对象只是空的。stats.js 中的一些痕迹显示“this”也是一个空对象。

是什么赋予了?

4

2 回答 2

1

首先看到这个链接。

现在让我们看看你的代码 -

    var stats = require("./stats");
    //My steps - 

    //First Log
    console.log(stats.func1); // returns undefined
    //Second Log
    console.log(global.func1, global === GLOBAL); // returns [Function], true

从此代码中删除 -
1. 在浏览器中,全局对象是window对象。
2. 在 node.js 中它是global对象。
3.在模块中使用 var定义只会创建一个具有module范围的变量。
4. 定义没有关键字的东西var会在全局范围内创建一个变量。

所以func1func2被定义在全局范围内。将其传递给module.exports将仅传递当前模块对象。

希望它有帮助,快乐的编码!

于 2013-09-05T17:31:19.650 回答
0

不,不应该?这种格式与 Node.js 完成其工作所需的格式完全不同。

“什么给出”是您没有阅读节点的工作原理。Node.js 不仅仅是“JavaScript”,它是一个编程模型,具有更丰富的 API 和特定的行为。需要使用“module.exports”对象,因此最好实际阅读如何使用节点。

神话.js:

var func3 = function() { ... },
    prop = "something";
...
module.exports = {
  func1: function() { ... },
  func2: function() { ... },
  func3: funct3,
  prop: prop,
  ...
};

这等同于:

var func3 = function() { ... },
    prop = "something",
    ...
    MyLib = {
      func1: function() { ... },
      func2: function() { ... },
      func3: funct3,
      prop: prop,
      ...
    };
...
module.exports = MyLib;

应用程序.js:

var mything = require("mything);
于 2013-09-04T14:50:20.363 回答