JavaScript 中是否不再允许向类添加另一个方法?



所以我在 typescriptlang.org/play 中玩弄,用pilot(): void {}的方法编写了一类Plane,我将JS代码粘贴到Chrome控制台中并玩了一分钟。

然后我想将能够向class Plane {}添加另一种方法的概念付诸实践。这就是我在 TypeScript 方面所拥有的:

class Plane {
color: string = 'red’;
pilot(): void {
console.log(‘swoosh’);
}
takeoff(): void {
console.log(‘ready for takeoff’);
}
}

这是JS版本:

class Plane {
constructor() {
this.color = 'red';
}
pilot() {
console.log(‘swoosh’);
}
takeoff() {
console.log(‘ready for takeoff’);
}
}

当我将其粘贴到Chrome控制台时,我得到了Uncaught SyntaxError: Identifier 'Plane' has already been declared.

好的,那么我该如何添加新方法呢?我应该能够根据需要轻松地将任意数量的方法附加到原型上。是因为术语prototype在我的 JS 代码中不存在吗?

classJS-land中的constlet这样的函数:它不能被重新声明。当我在使用这些术语的控制台中粘贴代码时,我通常每次都会刷新页面。

但令人高兴的是,新版本的Chrome允许您在控制台中重新声明letconst。我不知道这是否会扩展到class.

请注意,您确实可以在声明Plane后添加类似Plane.prototype.foo = function() {}的行,这将按您的预期工作。

您似乎正在将 JavaScript 代码粘贴到已经定义Plane类的控制台中。

如果您已经粘贴了类定义一次,则无法通过再次粘贴编辑的版本来重新声明它,则需要刷新页面或仅在空选项卡中打开控制台以获取新环境。

如果您想尝试将方法添加到现有类中,则可以这样做:

// You start by defining the original class (or picking one of the defined ones like Date)
class Plane {
// Your class definition
getName() { return 'I am a plane'; }
}
// Then somewhere later in your code (or console)
Plane.prototype.sayHello = function() {
return 'Hello ' + this.getName();
}
// And finally
const plane = new Plane();
plane.sayHello(); // Will return Hello I am a plane

最新更新