ThisAV 发表于 2024-4-17 16:33:42

这个 class 的constructor为什么不报错?

```
class a{
constructor(){
id:1;
val:2
}
}
let b=new a;
```

如上,这个class可以正常被调用,id和val也没有生成,但是这个写法并不会报错,为什么?

shabby 发表于 2024-4-17 16:33:43

id 那块是 js 的 label 语法,基本没人用,也没人教,但是 js 确实有这个语法

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/label

---

let b=new a; 里的 new a 可以不需要后面的括号,这也是合法的语法 等价于 let b = new a()

李恒道 发表于 2024-4-18 00:13:11

楼上正解
碰到这种问题可以去https://astexplorer.net/直接看AST结构
输入
```js
function aa() {
id: 1;
}
aa()

```
发现`id: 1;`被解析成了一个`LabeledStatement`
直接搜索就可以找到https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label

ThisAV 发表于 6 天前

shabby 发表于 2024-4-17 16:33
id 那块是 js 的 label 语法,基本没人用,也没人教,但是 js 确实有这个语法

https://developer.mozilla. ...

label 我恁是没往这想啊,我还以为是 constructor 里有什么特殊作用{:4_108:}

ThisAV 发表于 6 天前

李恒道 发表于 2024-4-18 00:13
楼上正解
碰到这种问题可以去https://astexplorer.net/直接看AST结构
输入


道哥的这个AST网站好,Mark一个
页: [1]
查看完整版本: 这个 class 的constructor为什么不报错?