繁体   English   中英

为什么TypeScript定义原型的属性而不是对象的属性?

[英]Why does TypeScript define properties on the prototype and not the object?

我有一个数据对象,并且在TypeScript中定义了一个属性,例如:

get name() {
    return this._hiddenName;
}
set name(value) {
    ...stuff...
    this._hiddenName = value;
}

但是当我去输出代码时,我看到

Object.defineProperty(MyObject.prototype, "name", {

因此该属性存在于原型而不是对象上。 当我想调用它时很好,但是当我想使用Object.keys()遍历对象的属性时,这些属性将不会被拾取。

具体来说,我正在将具有属性的对象传递到Angular的FormGroup中,并尝试使用Object.keys将对象映射到表单,该对象找到我的支持属性,而不是我实际上想要公开的属性。

如果定义一个类,则所有方法和获取器/设置器都将位于原型中:

class MyObject {
  private _hiddenName: string
  get name() {
    return this._hiddenName;
  }
  set name(value) {
      this._hiddenName = value;
  }
}

但是您可以定义一个对象:

let obj = {
  _hiddenName: "abc",
  get name() {
    return this._hiddenName;
  },
  set name(value) {
      this._hiddenName = value;
  }
}

在这里,getter和setter在对象中。 编译后的代码与TypeScript代码相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM