javascript - NodeJS 和类限制

标签 javascript node.js

我想知道是否有办法在 NodeJs 的 CLASS 中处理以下场景。我有一个类可以称之为联系人,它有一堆字符串字段,但也有一个电子邮件类数组。我如何在 JavaScript 中指定一个值实际上应该是另一个类的数组,因为我无法在 JavaScript 中指定数据类型。另外,我如何限制类中某个字段的值,例如我的电子邮件类有一个名为 type 的字段,它可以是“home|work|other”

最佳答案

尽管 Javascript 不会为您提供静态类型,但由于您使用的是 Node 并且可以控制所使用的版本,因此您还有一些其他选择。您可以使用代理。如果您的电子邮件数组是代理,您可以控制 setter 并只允许添加您想要添加的内容。例如(不确定此代码段是否会在所有浏览器中运行):

class Email {
  constructor(addr) {
    this.address = addr
  }
}

// proxy array to check for values on set
let emails = new Proxy([], {
  set: function(target, property, value, receiver) {
    if (!(value instanceof Email)) {
      if (property != "length")
        console.log(`Array can only contain Email instances "${value}" is an incompatible type`)
      return true
    }
    target[property] = value;
    return true;
  }
});

// fails
emails.push(1)
console.log("current array:", emails)

// works
let e = new Email("test@example.com")
emails.push(e)
console.log("current array:", emails)

// fails
emails[0] = "test"
console.log("current array:", emails)

关于javascript - NodeJS 和类限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54045377/

相关文章:

node.js - 发出包含 JSON 正文的 POST 请求时,request.body 为空

javascript - NodeJs : external javascript with dependencies

javascript - Google map API 中的建议路线选项?

javascript - 我的对象没有删除

javascript - 刷新特定DIV

javascript - 回调/复用 channel 的复用参数

node.js - expressjs文件下载内存泄漏

javascript - 为什么 Firefox 和 Chrome 控制台中的 '}{' 之类的构造会返回 'undefined' ?

javascript - QUnit/Sinon 测试异步 ajax 调用如果 http 错误则抛出异常

node.js - Docker 容器文件被主机卷共享覆盖