我已经开始尝试使用 Node,并且在单个文件中工作。 这是我的代码的基本原理:
function Validation(){
this.a = function(){...}
this.b = function(){...}
return this;
}
var validation = Validation();
(function(){
models["a"] = {
validate: [a, b]
}
}).call(validation);
这工作得很好。现在我想将验证函数移动到它自己的文件validation.js。因此我将代码更改为:
/* validation.js */
function Validation(){
this.a = function(){...}
this.b = function(){...}
return this;
}
module.exports.Validation = new Validation();
/* Main file */
var validation = require('./validation');
(function(){
models["a"] = {
validate: [a, b]
}
}).call(validation);
当我尝试运行此代码时,出现错误“ReferenceError:a 未定义”。
我可以通过将 a
更改为 this.a
来解决这个问题,但为什么之前没有 this
关键字就可以工作呢?
最佳答案
Validation
(没有 new
关键字)不是构造函数,因此在其中使用 this
可以处理全局对象上下文。
试试这个:
function Validation() {
return {
a: function() {...},
b: function() {...}
};
}
或者以其他方式使用module.exports.Validation = new Validation()
;
除了您的实际问题之外。您必须使用 this.a
因为没有导出并可用作 a
和 b
的局部作用域变量(尽管全局对象会发生这种情况) 。您当然可以使用 with
(with (this) models["a"] = {validate: [a, b]})
但最好在全部。所以答案是你必须使用 this.a
。
关于JavaScript 模块模式和 this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22015409/