预测未来最好的方法就是去创造未来。——<亚伯拉罕·林肯>
作者: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
关注【公众号】,了解更多。
关注【公众号】,了解更多。
关注【公众号】,了解更多。
赞赏一下 坚持原创技术分享,您的支持将鼓励我继续创作!