javascript - 将 Javascript "Class"原型(prototype)复制到对象

标签 javascript node.js prototype

我创建了一个 用户。它具有一些属性,例如:名称、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;
}

还有一些原型(prototype)函数,例如:

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 数据库中),而不在对象中包含函数。

当我从数据库中获取对象时,问题就来了。它具有存储的所有属性,但我需要添加回功能。我曾尝试对我发现的 mixins 使用一些 extend 函数,但它们将函数添加为 ownProperties,因此,下次我将更新的记录保存到 DB 时,我会保存函数。

如何将接收到的对象再次转换为 User 类型的对象? 使类的所需方法也出现在实例上。

最佳答案

多种实现方式:

这和你的方式大致相同:

Object.setPrototypeOf(instance, User.prototype)

您可以实例化一个新对象并复制属性:

var obj = Object.assign(Object.create(User.prototype), instance);

您可以使用任何extend 实现来代替Object.assign(它本身还不可用)

或者您可以更改您的User 实现以将所有字段存储在单个属性中,即对象

关于javascript - 将 Javascript "Class"原型(prototype)复制到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30235313/

相关文章:

javascript - 如何在 HTML5 localStorage/sessionStorage 中存储对象

javascript - 在 javascript 较多的网站中,如何将用户重定向到不同的页面,同时加载 javascript,而不使用 GET 参数?

node.js - 在 npm 中找不到模块

node.js - 当我运行应用程序时,我的本地服务器找不到 Bower 文件

javascript - 咕噜声 : custom task development how-to

javascript对象原型(prototype)调用

javascript - Javascript 中的继承 - 原型(prototype)不在定义部分?

c - 函数原型(prototype)中的函数声明(需要帮助)

javascript - 为什么人们将自己的自定义/用户函数添加到 jQuery 对象中?

javascript - 使用 JavaScript 汇总文本框列并显示在文本框中