我在節點中編寫了一個簡單的應用程序,但在引用不同模塊的對象時遇到了問題。對象的構造函數和方法(我跳過一些方法來保持摘錄短):類型對象不在node.js中的模塊中返回值
function Account (name, password) {
this._name = name;
this._password = password;
this._attributes = [];
}
Account.prototype.load = function (id) {
var self = this;
self = db.loadObject(id, 'account'); // separate module to save/retrieve data
this._name = self._name;
this._password = self._password;
this._attributes = self._attributes;
return this;
};
Account.prototype.getAttributes = function() {
return this._attributes;
}
Account.prototype.addAttributes = function (a) {
this._attributes.push(a);
};
module.exports = Account;
的DB模塊是在這一點上沒有任何幻想:
var fs = require('fs');
var paths = {
'account' : './data/accounts/'
};
function loadObject (name, type) {
var filePath = paths[type] + name + '.json';
if (!fs.existsSync(filePath)) {
return false;
}
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
};
function saveObject (object, type) {
fs.writeFileSync(paths[type] + object.getName() + '.json', JSON.stringify(object),'utf8');
};
exports.loadObject = loadObject;
exports.saveObject = saveObject;
將文件保存爲:
{"_name":"John","_password":"1234","_attributes":[["Jane","sub",[[10,1]]]]}
在我的來電顯示模塊,我嘗試檢索屬性:
var Account = require('./account.js');
var account = new Account();
...
account.load(name);
...
var attr = account.getAttributes();
for (var item in attr) {
console.log(item[0]);
};
...
在上面的代碼中,最後一個循環打印未定義的對象。我已經檢查過這些文件,信息已經保存並且沒有任何問題。數組attr不是空的。如果我和打印: util.log(typeof attr+': '+attr);
我得到: object: Jane,sub,10,1
實例問題?我是否應該通過account.attributes重寫要直接訪問的_attributes?
沒有什麼,在我跳爲明顯不正確。但是,如果'db.loadObject(id,'account');'以某種異步方式工作,它可以解釋你得到的結果。 (數據庫操作通常是異步的。)您能否將其代碼添加到您的問題中,或者如果您使用的是第三方庫,請提供該庫文檔的鏈接? – Louis
'load'方法是否做異步?所以對'this._name'的賦值都是未定義的,因爲'db.loadObject'返回一個promise或其他東西? –
var self = this;'很混亂。它應該是'var self = db。...' – Bergi