如何在控制台中重新定义 JavaScript 类?

问题描述 投票:0回答:4

我对 JS 类相当陌生,并且主要从事后端工作。

我正在尝试新的 JS 类,因此我开始查看这里的示例:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

我进入了 chrome(chromium)开发者工具控制台,编写了 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 中有一个新的作用域,并且类会自动使用新的作用域等等......但实际上,我如何重新定义我的类?

javascript ecmascript-6 es6-class
4个回答
12
投票

没有一个答案可以在不更改原始代码的情况下提供解决方案......所以这里是改进的解决方案。

如果在代码中你有这样的东西:

class Polygon {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
}

那么这意味着您已经创建了一个名为

let
Polygon
变量。您无法重新声明
Polygon
,但可以重新分配它。

因此,如果您需要进行实验,例如JS 控制台只需这样做:

Polygon = class {
  //... new stuff here
}

这将取代原来的类,但不会违反

let
限制。

您可以通过将上面的代码粘贴到控制台中来尝试一下,然后尝试

new Polygon(1,2)


6
投票

块作用域声明(

let
const
class
)无法重新声明。

类表达式

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

var Polygon = class Polygon  { ... };
new Polygon();
var Polygon = class Polygon  { ... };
new Polygon();

2
投票

我使用的是 Chrome 版本 54.0.2840.71(64 位),虽然我可以打开控制台并声明一个新类,但我无法重新定义类(您将收到错误:

VM272:1 Uncaught SyntaxError: Identifier 'Thing' has already been declared
,因为我试图重新定义我的班级
Thing
)。

如果您只是想稍后向类添加方法,您可以将它们添加到类的

prototype
:

Polygon.prototype.area = function() {
  // do some stuff
}

但是,在这种情况下,它不会是像您的示例中那样的

getter
方法。

编辑

为了解决语法错误,如果您只是将类重新分配为变量,它应该执行您想要的操作:

// in your original code

var Polygon = class{}

// in the console

var Polygon = class {
  // with new stuff
}

-2
投票

很好,

所以现在我所有的类文件都是这样开始的:

if(typeof(someClass)== undefined){
  class someClass{}
}
someClass= class{
  constructor(){
    console.log(typeof(someClass));
  }
}
const newobject= new someClass();

块引用

© www.soinside.com 2019 - 2024. All rights reserved.