0
我有一個數據對象,我已經在打字稿等被定義的屬性:爲什麼TypeScript在原型而不是對象上定義屬性?
get name() {
return this._hiddenName;
}
set name(value) {
...stuff...
this._hiddenName = value;
}
,但是當我去的輸出碼我看到
Object.defineProperty(MyObject.prototype, "name", {
所以財產上的原型,而不是存在目的。當我想調用它時,這很好,但是當我想用Object.keys()來查看對象的屬性時,這些屬性將不會被拾取。
具體而言,我將具有屬性的對象傳遞給Angular中的FormGroup,並嘗試將對象映射到使用Object.keys的對象,該對象找到我的支持屬性,但不是我實際想要公開的屬性。
沒錯,'name'不是自己的屬性,所以它沒有被'Object.keys'列出。它在原型上定義是絕對正確的,因爲你通過使用類成員的名稱告訴它它在那裏。 – dfsq
好吧,所以我的假設是屬性是爲了封裝而設計的,所以你可以讓某件事情像對象上的基本價值一樣。事實上,JavaScript有一個「enumerable」,它使屬性顯示爲對象的正常部分(在Object.keys()中)。 TypeScript實際上設置了「enumerable:true」,但隨後將屬性從對象中取出並放入原型中,該原型專門禁用了「enumerable:true」的意圖以及屬性對外部世界的正常價值。 – WillSeitz
用'for ... in'迭代時,包含原型*上的可枚舉屬性*。 – Pointy