gpt4 book ai didi

javascript - 为什么 TypeScript 在原型(prototype)而不是对象上定义属性?

转载 作者:行者123 更新时间:2023-12-01 03:46:25 25 4
gpt4 key购买 nike

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

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

但是当我看到输出代码时

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

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

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

最佳答案

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

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

关于javascript - 为什么 TypeScript 在原型(prototype)而不是对象上定义属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43545608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com