我有一个数据对象,我在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找到我的支持属性,但不是我实际想要公开的属性。
答案 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代码相同。