将 Javascript "Class" 原型复制到对象
Copy Javascript "Class" Prototype to an Object
我创建了一个 class 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
函数作为我发现的 mixins,但它们将函数添加为 ownProperties,因此,下次我将更新的记录保存到 DB 时,我会保存这些函数。
如何将接收到的对象再次转换为 User 类型的对象? 以获取同时出现在实例上的 class 所需的方法。
多种方法:
这和你的方法大致相同:
Object.setPrototypeOf(instance, User.prototype)
您可以实例化一个新对象并复制属性:
var obj = Object.assign(Object.create(User.prototype), instance);
您可以使用任何 extend
实现而不是 Object.assign
(它本身还不可用)
或者您可以更改 User
实现以将所有字段存储在单个 属性 中,即对象
我创建了一个 class 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
函数作为我发现的 mixins,但它们将函数添加为 ownProperties,因此,下次我将更新的记录保存到 DB 时,我会保存这些函数。
如何将接收到的对象再次转换为 User 类型的对象? 以获取同时出现在实例上的 class 所需的方法。
多种方法:
这和你的方法大致相同:
Object.setPrototypeOf(instance, User.prototype)
您可以实例化一个新对象并复制属性:
var obj = Object.assign(Object.create(User.prototype), instance);
您可以使用任何 extend
实现而不是 Object.assign
(它本身还不可用)
或者您可以更改 User
实现以将所有字段存储在单个 属性 中,即对象