JavaScript类/构造函数vs定义函数
JavaScript Class/Constructor vs Definition as Function
正在努力寻找相关文档。我之前在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上工作,而另一个可以吗?
您的第一个示例语法无效。正确的写法是:
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; };
您需要从var area =…
get area() { return this.height * this.width; }
https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Classes https://jsfiddle.net/dwahlin/o93Lm0rc/相关文章:
- 用嵌套函数和默认函数定义函数
- 自定义函数中的光标位置
- Jquery未定义函数正在停止其他操作
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- javascript无法重新定义函数内部的全局对象
- 定义函数时,如何捕获外部变量的当前值
- 能够在定义函数表达式之前使用它
- Google Sheet自定义函数返回0
- Javascript-defineProperty和直接在对象上定义函数之间的区别
- 其中是自定义函数中的属性
- 创建自定义函数以在函数上运行完整的多选下拉列表
- Google Sheets自定义函数条件格式
- 为什么当我需要位于顶部的函数时,在脚本中的某些点上没有定义函数
- 使用变量的名称,然后为该变量定义函数
- dalek回调或自定义函数
- 如何在angular ui模态控制器中定义函数
- Uncaught ReferenceError:尝试在Android网络视图中访问时未定义函数
- UI网格:如何从自定义函数访问MODEL_COL_FIELD
- 在构造函数中定义函数会比将其附加到原型消耗更多的内存
- 使用 Javascript 中的函数重新定义函数