🔎 搜索词
装饰器类静态字段
🕗 版本与回归信息
- 这是一次崩溃
- 在版本______和______之间发生了变化
- 在提交或PR______中发生了变化
- 在我尝试的每个版本中(在ES装饰器实现后),我都查看了关于装饰器的FAQ条目,并且我检查了这个行为
- 我无法在之前的版本上测试这个,因为______
⏯ Playground链接
https://www.typescriptlang.org/play?useDefineForClassFields=true&target=9&ts=5.4.0-dev.20240130#code/DYUwLgBA8gTglgczgOwIbAGIHssG4BQ+AxsKgM5kQBCqMEA3gL6EBmArskWHFshACYgiACmxYAlA3wRo8JGkw4IAXghiCMmODYw+NGAWb4AAoKLFSFNUvrSIZMKm5EIABw33HziKiJEQFFh0qB4OTnAuALbCkkz4RkS8ZFigAHTAWAjC+qkAFuRQAO7IAAowWK4gMGAAnsIARK714gA01LR5BcVlFVW1DajNbTn5ZEWl5ZXVdfWRzeIEicjJaRlZsIgo6GKdY92TfTNNrbKbCjuj4z1T-fWDJxvy2zi7VwfTDXPiC0A
💻 代码
let OriginalFoo;
class Bar {}
function dec(Foo) {
OriginalFoo = Foo;
return Bar;
}
@dec
class Foo {
static p;
static accessor a;
static m() {}
}
console.log(Bar.hasOwnProperty("p"), Bar.hasOwnProperty("a"), Bar.hasOwnProperty("m"));
console.log(OriginalFoo.hasOwnProperty("p"), OriginalFoo.hasOwnProperty("a"), OriginalFoo.hasOwnProperty("m"));
🙁 实际行为
它打印出
false, false, false
true, true, true
🙂 预期行为
它应该打印出
true, true, false
false, false, true
3条答案
按热度按时间qij5mzcb1#
我再次检查了规格,我记得静态访问器应该安装在
OriginalFoo
上,但是它的后备存储私有字段应该安装在Bar
上,所以访问OriginalFoo.a
应该抛出一个错误,因为存储密钥没有在OriginalFoo
上定义,但无论如何OriginalFoo.hasOwnProperty("a")
都应该返回true
。wswtfjt72#
根据规范(以及在您的其他评论中反映的),它实际上应该打印
访问
OriginalFoo.a
应该抛出一个错误,因为存储密钥未在OriginalFoo
上定义。是的,我们目前在访问器上发出
__classPrivateFieldGet(_classThis, _classThis, "f", _Foo_a_accessor_storage)
时,应该发出__classPrivateFieldGet(this, _classThis, "f", _Foo_a_accessor_storage)
而不是。wrrgggsh3#
根据规范(以及在您的其他评论中反映的),它实际上应该打印
@rbuckton 是的,您说得对,当时我把后备存储键定义与访问器定义混淆了。