如何在控制台中重新定义JavaScript(非CSS)类?

时间:2016-11-07 17:26:56

标签: javascript class ecmascript-6 es6-class

我是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,所以我可以重新定义我想要的东西。

3 个答案:

答案 0 :(得分:6)

阻止范围声明(letconstclass)无法重新声明。

Class expressionvar可用于在控制台中重用和重新声明变量:

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