预测未来最好的方法就是去创造未来。——<亚伯拉罕·林肯>
作者:Ashish Lahoti
译者:cl9000
来源:https://codingnconcepts.com/javascript/classes-in-javascript/
类声明 Class Declaration
让我们看看在JavaScript中使用function构造函数和class关键字创建类的例子:
1 | // ES5 Function Constructor |
请注意,class是一种函数类型,所以我们用它来替换function。从这个意义上说,两种创建类的方法几乎是相同的。
我们可以让我们的代码更短,像这样:
1 | class Car { |
方法 Methods
让我们向 Car类 添加一些方法
Getter Setter方法(实例方法)从类的实例中调用。它们分别使用get和set关键字来定义,以获取和设置属性。原型方法(实例方法)从类的实例中调用。它们用于访问实例属性并对它们执行一些操作。静态方法(类方法)直接从类调用。它们是使用static关键字定义的,通常用于创建实用函数。
1 | class Car { |
让我们使用 Car 类创建一些对象,并调用它们的 getter、setter、prototype 和静态方法
1 | let redToyotaCar = new Car("Toyota", "red", 500000); |
在上面的类中,我们有color属性的 getter 和 setter。我们使用 _ convention来创建一个后备字段来存储我们的color属性。如果每次不调用get或set,就会导致堆栈溢出。get将被调用,这将导致get被反复调用,从而创建一个无限循环。
VM172:12 Uncaught RangeError: Maximum call stack size exceeded
at Car.set color [as color] (:12:16)
at Car.set color [as color] (:12:16)
at Car.set color [as color] (:12:16)
at Car.set color [as color] (:12:16)
at Car.set color [as color] (:12:16)
at Car.set color [as color] (:12:16)
at Car.set color [as color] (:12:16)
at Car.set color [as color] (:12:16)
at Car.set color [as color] (:12:16)
at Car.set color [as color] (:12:16)
继承 Inheritance
假设我们想从Car类创建一个Toyota子类并添加一些额外的字段,如" model "和" make "
1 | class Toyota extends Car { |
我们从Toyota子类中创建一些对象
1 | let toyotaCamery = new Toyota("red", 800000, "Camary", 2010); |
我们看到,使用ES6 class关键字创建子类非常方便和容易。
参考
- 原文 - https://codingnconcepts.com/javascript/classes-in-javascript/
- MDN - https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/class
关注【公众号】,了解更多。
关注【公众号】,了解更多。
关注【公众号】,了解更多。

赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!
支付宝打赏
微信打赏