簡體   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