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

时间:2017-04-21 14:43:56

标签: javascript angularjs typescript

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

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

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

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

所以属性存在于原型而不是对象上。当我想调用它时,这很好,但是当我想用Object.keys()查看对象的属性时,这些属性将不会被拾取。

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

1 个答案:

答案 0 :(得分:2)

如果你定义一个类,所有方法和getter / setter都将在原型中:

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代码相同。