我创建了一个名为User
的类,它拥有一些属性,如:名称、ID、密码等。
我设置了一个构造函数,如下所示:
function User(name1, email, password) {
this.name = name1;
this.id = __GUID();
this.type = __TYPE;
this.addNewEmail(email);
this.password = (new Password).createFromRawPassword(password).crypt;
}
还有一些原型函数,例如:
User.prototype.save = function(cb, callback) {
return cb.bucket.upsert(this.id, this, function(err, res) {
if (callback == null) {
return callback(err, res);
}
});
};
User.prototype.addNewEmail = function(email) {
this.emails = this.emails || [];
return this.emails.push(email);
};
这对我非常有效,让我可以将我的对象存储为序列化的JSON(使用NodeJS在couchbase数据库中),而不必在对象中包含函数。
当我从数据库获取对象时,问题就来了。它按存储的所有属性返回,但我需要重新添加函数。我尝试使用一些我找到的
extend
函数进行混入,但它们将函数添加为自有属性,因此,下次我保存更新后的记录到数据库时,我得到函数已经保存的结果。如何将接收到的对象转换回User类型的对象?以便在实例上也出现类所需的方法。
instance.__proto__ = User.prototype
,但我觉得这很别扭。这对于Node.js来说可以吗?还有其他好的解决方案吗? - Vicenç Gascó