JavaScript类/构造函数与定义为函数

时间:2016-10-11 17:18:31

标签: javascript jsfiddle

努力寻找相关文档。我之前在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上工作而另一个呢。

2 个答案:

答案 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

https://jsfiddle.net/dwahlin/o93Lm0rc/