Javascript 类具有静态成员`名称时出现TypeError`
我有下面的TypeScript类Javascript 类具有静态成员`名称时出现TypeError`,javascript,typescript,Javascript,Typescript,我有下面的TypeScript类 module Test { "use strict"; class Foo { public static name = "foo"; } } 很简单 但当在Chrome中运行时,我得到以下错误: 未捕获的TypeError:无法分配给函数“function Foo(){}”的只读属性“name” 以下是生成的javascript: var检验; (功能(测试){ “严格使用”; var Foo=(函数(){ 函数F
module Test {
"use strict";
class Foo {
public static name = "foo";
}
}
很简单
但当在Chrome中运行时,我得到以下错误:
未捕获的TypeError:无法分配给函数“function Foo(){}”的只读属性“name”
以下是生成的javascript:
var检验;
(功能(测试){
“严格使用”;
var Foo=(函数(){
函数Foo(){
}
Foo.name=“Foo”;
返回Foo;
}());
})(测试| |(测试={}))
问题似乎是您试图写入函数名。在最初编写的代码中,您可以在编译后的代码中看到您正在更改Foo.name
考虑一下这段代码
function Foo(){}
console.log(Foo.name); // prints 'Foo'
出现错误是因为您试图更改此函数的属性,但不允许这样做(只读属性..
)。有关为什么(以及如何)不允许您这样做的更多信息,请参见。感谢@ssube在评论中提供此链接
因此,虽然您自己没有创建该属性,但您的所有函数实际上都有它。您可以查看更多信息 问题是Foo.name=“Foo”代码>因为名称是javascript中函数的预定义属性(如参数、长度等),它保存函数的名称(在您的例子中为“Foo”),所以您不能用自己的定义覆盖它
<> P>查看细节 @ Sn.bjrn。当事情有意义时总是很好。如果这充分回答了你的问题,考虑把它标记为“接受的答案”,让其他人有类似的问题知道:-你必须等待格雷斯损坏,“不允许这样做”,因为有魔力(而且鲜为人知)。属性描述符:@ssube谢谢,我在答案中添加了这个:-)您可以覆盖大多数预定义属性(使用泛型名称时,这实际上是一个常见问题)。此特定属性定义为不可写。true。。。但是它是可配置的,因此这实际上会更改名称Object.defineProperty(Foo,'name',{value:'Foo',configurable:true})代码>