我是JS类的新手,而且我主要从事后端工作。
我正在玩新的JS课程,所以我开始浏览这里的例子:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes
我去了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中有一个新的范围,并且类会自动使用新的范围等等......但实际上,我如何重新定义我的课程? :d
我经常写Python,所以我可以重新定义我想要的东西。
答案 0 :(得分:6)
阻止范围声明(let
,const
,class
)无法重新声明。
Class expression和var
可用于在控制台中重用和重新声明变量:
var Polygon = class Polygon { ... };
new Polygon();
var Polygon = class Polygon { ... };
new Polygon();
答案 1 :(得分:4)
没有答案提供了无需更改原始代码的解决方案...因此,这里是完善的解决方案。
如果在代码中您有类似以下内容:
class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
}
}
这意味着您已经创建了一个名为let
的{{1}}变量。您无法重新声明Polygon
,但可以重新分配它。
因此,如果您需要进行例如JS控制台可以做到:
Polygon
这将替换原始类,但不会违反Polygon = class {
//... new stuff here
}
限制。
您可以通过在控制台中粘贴以上代码来进行尝试,然后尝试let
。
答案 2 :(得分:2)
我使用的是Chrome 54.0.2840.71(64位),虽然我可以打开控制台并声明一个新类,但我无法重新定义一个类(你会收到错误:{{ 1}},因为我试图重新定义我的班级VM272:1 Uncaught SyntaxError: Identifier 'Thing' has already been declared
)。
如果您只是想稍后在课程中添加方法,可以将它们添加到课程的Thing
中:
prototype
但是,在这种情况下,它不会像您的示例中那样是Polygon.prototype.area = function() {
// do some stuff
}
方法。
修改强>
要解决语法错误,如果您只是将一个类重新分配为变量,它应该按照您的意愿执行:
getter