我已經開始與節點進行試驗,我已經在單個文件內工作。 這是我的代碼的基本原則:的JavaScript模塊模式,這
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 is not defined」。 我可以通過改變a
到this.a
解決這個問題,但爲什麼它沒有this
關鍵字之前的工作?
僅僅是因爲IIFE就是所謂的上下文'validation','a'告訴JS掃描範圍(當前和最多,一直到全局)爲一個名爲'a'的_variable_。 'this.a'告訴JS在上下文對象的原型鏈中查找名爲'a'的_property_,即'Validation'。你可以寫'(function(){validation.a;}());'。 'validation'將被解析爲全局的'var validation',並且正在訪問它的'a'屬性 –
如果你只構造一次驗證對象,爲什麼你會使用一個構造對象呢? – OrangeDog