努力寻找相关文档。我之前在JavaScript中设计了一个类似这样的类:
class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
}
area = function() {
return this.height * this.width;
}
}
它没有在JSFiddle上工作,我有人告诉我,我需要这样做:
var Polygon = function(height, width) {
this.height = height;
this.width = width;
this.area = function() { return this.height * this.width; }
}
我已经看到有不止一种方法可以做到这一点,我想知道这是否类似于C ++,你可以这样做... Polygon * myPoly = new Polygon(3,4) ;制作指针,而不是Polygon myPoly(3,4);或者,如果它只是风格,如果是这样,任何洞察力为什么他们中的一个不能在JSFiddle上工作而另一个呢。
答案 0 :(得分:3)
您的第一个示例是无效的语法。写它的正确方法是:
class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
}
area() {
return this.height * this.width;
}
}
如果您使用支持类的浏览器,这应该在JSFiddle中工作,但是有一些浏览器仍然没有(下面有更多内容)。
关于两种编写方式之间的区别,有两件事情正在发生。
首先,JavaScript是一种非常灵活的语言,通常有很多方法可以实现您想要做的任何事情。
其次,class
语法是一种相当新的JavaScript功能,并非在所有广泛使用的浏览器(特别是所有版本的Internet Explorer)中得到完全支持。在表面下,class
实际上只是用于创建可构造对象的“语法糖”,就像第二个示例中所示的那样,因此这两个代码示例的最终结果将或多或少相同。
所以为了回应你的C ++类比,不,你提供的两个C ++代码示例做了很多不同的事情,而这两个例子产生了几乎相同的结果。要获得几乎完全相同的结果,您可以将第一个示例更改为:
class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
this.area = function () { return this.height * this.width; };
}
}
或者将第二个例子更改为:
var Polygon = function(height, width) {
this.height = height;
this.width = width;
};
Polygon.prototype.area = function() { return this.height * this.width; };
答案 1 :(得分:1)
您需要将代码从var area = ...更改为
get area() { return this.height * this.width; }
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes