- Hands-On Machine Learning with JavaScript
- Burak Kanber
- 247字
- 2021-06-25 21:38:18
Classes
One very welcome change in ES6 is the addition of classes and class inheritance. Previously, object-oriented programming in JavaScript required prototypical inheritance, which many developers found unintuitive, like the following ES5 example:
var Automobile = function(weight, speed) {
this.weight = weight;
this.speed = speed;
}
Automobile.prototype.accelerate = function(extraSpeed) {
this.speed += extraSpeed;
}
var RaceCar = function (weight, speed, boost) {
Automobile.call(this, weight, speed);
this.boost = boost;
}
RaceCar.prototype = Object.create(Automobile.prototype);
RaceCar.prototype.constructor = RaceCar;
RaceCar.prototype.accelerate = function(extraSpeed) {
this.speed += extraSpeed + this.boost;
}
In the preceding code, extending an object requires calling the parent class in the child's constructor function, creating a clone of the parent's prototype object, and overriding the parent's prototype constructor with the child's prototype constructor. These steps were seen as unintuitive and burdensome by most developers.
Using ES6 classes, however, the code will look like this:
class Automobile {
constructor(weight, speed) {
this.weight = weight;
this.speeed = speed;
}
accelerate(extraSpeed) {
this.speed += extraSpeed;
}
}
class RaceCar extends Automobile {
constructor(weight, speed, boost) {
super(weight, speed);
this.boost = boost;
}
accelerate(extraSpeed) {
this.speed += extraSpeed + this.boost;
}
}
The preceding syntax is more in line with what we'd expect from object-oriented programming, and also makes inheritance much simpler.
It's important to note that under the hood, ES6 classes still use JavaScript's prototypical inheritance paradigm. Classes are just syntactic sugar on top of the existing system, so there is no significant difference between these two approaches other than clean code.
- Ansible Configuration Management
- Spark編程基礎(Scala版)
- 人工免疫算法改進及其應用
- Blockchain Quick Start Guide
- 統計學習理論與方法:R語言版
- Troubleshooting OpenVPN
- 在實戰中成長:Windows Forms開發之路
- 21天學通Linux嵌入式開發
- Cloudera Hadoop大數據平臺實戰指南
- Oracle 11g Anti-hacker's Cookbook
- FreeCAD [How-to]
- Linux常用命令簡明手冊
- Arduino創意機器人入門:基于Mind+
- Building Virtual Pentesting Labs for Advanced Penetration Testing(Second Edition)
- 仿魚機器人的設計與制作