0
我有一個對象的構造函數。由於它創建的參數是固定的,我將它們作爲數組存儲在JSON文件中,並希望我可以使構造函數從該文件中獲取參數。從構造函數中獲取JSON的構造函數參數?
即使讀JSON文件速度快,I D不喜歡,並認爲我能做到這一點:
//test.json:
[
{"foo": "L", "bar": 120000},
{"foo": "T", "bar": 1000},
{"foo": "D", "bar": 1000}
]
所以現在,在我的目標,我只是解析JSON和從它創建的對象,我已經想這將是簡單的:
//test.js
var fs = require('fs'),
tests = [];
function Test(id) {
this.foo = tests[id].foo;
this.bar = tests[id].bar;
}
function print() {
console.log(this);
}
module.exports = Test;
Test.prototype.print = print;
fs.readFile('./tests.json', function (err, data) {
if (err) {
console.log('Error reading tests.json\n' + err);
throw err;
return ;
}
tests = JSON.parse(data);
});
但是當我嘗試使用它:
var Test = require('./test.js'),
t = new Test(0);
t.print();
ñ Ode在tests
的test.js
上拋出一個未定義的錯誤。
我可以看到該解決方案都impratical:
- 解析JSON在構造函數中。它會阻止事件循環或使構造器異步,這兩種方法都很糟糕。
- 從外部解析JSON,並創建一個簡單的類構造函數。因爲該對象在多個模塊一起使用,其中一些人是自己的對象,這將是impratical,這樣就需要獲得JSON作爲參數...
我缺少什麼?這種模式是否可能,或者我應該重新開始並找到另一種解決方案?
你的問題不是關於構造函數,它只是'測試「是異步創建的。做一個'readFileSync'。 – Bergi
@Bergi:我不相信我沒有看到......我會接受ShanShan的答案,因爲它也是對的,並且也學到了一些東西,但是會使用你的解決方案,因爲我仍然可以用try/catch來進行錯誤檢查。 – DrakaSAN
'require()'也會拋出錯誤(未找到,語法錯誤...):) – Shanoor