我是JS类的新手,主要从事后端工作。
我正在尝试新的JS类,所以我开始学习这里的示例:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes
我转到chrome (Chrome)开发人员工具控制台,编写了Polygon类:
class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
}
}
然后,我想根据包含方法的示例重新定义类,所以我写道:
class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
}
get area() {
return this.calcArea();
}
calcArea() {
return this.height * this.width;
}
}
这会引发一个错误:Uncaught SyntaxError: Identifier 'Polygon' has already been declared(…)
现在我知道ES6中有一个新的作用域,类会自动使用新的作用域等等……但实际上,我该如何重新定义我的类呢?
我通常编写Python,所以我习惯于能够重新定义任何我想要的东西。
发布于 2018-07-19 05:23:54
没有一个答案能够在不更改原始代码的情况下提供解决方案...所以这是一个精炼的解决方案。
如果你在代码中有这样的代码:
class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
}
}
这意味着您已经创建了一个名为Polygon
的let
变量。您不能重新声明Polygon
,但可以重新分配它。
因此,如果您需要在JS控制台中进行实验,只需执行以下操作:
Polygon = class {
//... new stuff here
}
这将替换原始类,但不会违反let
限制。
您可以通过在控制台中粘贴上面的代码来尝试,然后尝试new Polygon(1,2)
。
发布于 2016-11-08 01:38:51
不能重新声明块作用域声明(let
、const
、class
)。
Class expression和var
可用于在控制台中重用和重新声明变量:
var Polygon = class Polygon { ... };
new Polygon();
var Polygon = class Polygon { ... };
new Polygon();
https://stackoverflow.com/questions/40471017
复制相似问题