How to redefine JavaScript (NOT CSS) classes, in the console?

為{幸葍}努か 提交于 2019-12-01 08:42:29

问题


I'm fairly new to JS classes, and am doing mostly back-end work.

I was playing around with the new JS classes and so I started going through the examples here: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes

I went to the chrome (chromium) developer tools console and I wrote the Polygon class:

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

Then I wanted to redefine the class, according to the example containing the methods, so I wrote:

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

  get area() {
    return this.calcArea();
  }

  calcArea() {
    return this.height * this.width;
  }
}

This raises an error: Uncaught SyntaxError: Identifier 'Polygon' has already been declared(…)

Now I understand there's a new scoping in ES6, and that classes automatically use the new scoping and so on... but really, how do I redefine my class? :D

I'm writing Python usually, so I'm used being able to redefine everything I want.


回答1:


None of the answers provide a solution without changing original code... So here is refined solution.

If in code you have something like this:

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

Then this means you've created a let variable named Polygon. You cannot redeclare Polygon, but you can reassign it.

So if you need to experiment in e.g. JS console just do:

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

This will replace the original class but will not violate let restrictions.

You can try this out by pasting above code in the console, and then try new Polygon(1,2).




回答2:


Block scope declarations (let, const, class) cannot be redeclared.

Class expression and var can be used to re-use and re-declare variables in console:

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



回答3:


I'm on Version 54.0.2840.71 (64-bit) of Chrome, and although I can open up the console and declare a new class, I can't redefine a class (you'll get the error: VM272:1 Uncaught SyntaxError: Identifier 'Thing' has already been declared, since I tried to redefine my class Thing).

If you simply want to add methods onto the class later, you can add them to the class's prototype:

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

In that case, however, it won't be a getter method like in your example.

Edit

To get around the syntax error, if you just reassign a class as a variable, it should do what you want:

// in your original code

var Polygon = class{}

// in the console

var Polygon = class {
  // with new stuff
}


来源:https://stackoverflow.com/questions/40471017/how-to-redefine-javascript-not-css-classes-in-the-console

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!