Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 类具有静态成员`名称时出现TypeError`_Javascript_Typescript - Fatal编程技术网

Javascript 类具有静态成员`名称时出现TypeError`

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

我有下面的TypeScript类

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})