我有一个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”也是一个空对象。是什么给出了?
答案 0 :(得分:1)
首先要看this链接。
现在让我们看看您的代码 -
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
关键字的内容将在全局范围内创建变量。
因此func1
和func2
在全球范围内定义。将此传递给module.exports
将仅传递当前模块对象。
希望它有所帮助,快乐编码!
答案 1 :(得分:0)
不,不应该吗?这种格式与Node.js完成其工作所需的格式完全不同。
“给出什么”是因为你没有读到节点的工作原理。 Node.js不只是“JavaScript”,它是一个具有更丰富的API和特定行为的编程模型。需要使用“module.exports”对象,所以实际阅读如何使用节点是个好主意。
mything.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;
app.js:
var mything = require("mything);