在 ECMAScript 2015 中,引入了类的概念,让 JavaScript 更加像传统的面向对象语言。类的出现,优化了我们的程序结构,让代码更加清晰易于管理。本文将会详细介绍如何在 ECMAScript 2015 中使用类,以及对类的深入学习和指导意义。
什么是类
在 ECMAScript 2015 中,类是一种函数式语法糖。它在语言层面抽象了几个概念:
- 构造函数
- 原型对象
- 实例对象
类可以看作是一个构造函数的语法糖,它的语法更加清晰易懂,让代码更加易于理解。
声明一个类
使用关键字 class
可以声明一个类,类名一般采用驼峰命名法。
下面我们来看一个例子:
-- -------------------- ---- ------- ----- ------ - ----------------- ---- - --------- - ----- -------- - ---- - --------- - --------------- ---- -- --------------- - -------- - -------------- -- ----------- ----- ------ - -
我们声明了一个 Animal
类,它有两个属性 name
和 age
,同时还有两个方法 sayName
和 sayAge
。其中,constructor
方法为构造函数,用来初始化实例对象的属性。类中定义的其他方法,则自动添加到原型对象上。
创建一个实例
通过 new
关键字,可以创建一个类的实例。需要注意的是,类必须使用 new
关键字进行实例化。
const dog = new Animal('snoopy', 3); dog.sayName(); // My name is snoopy dog.sayAge(); // I am 3 years old
我们创建了一个叫做 snoopy
的狗类实例,它的年龄是 3。通过实例对象,我们可以调用 sayName
和 sayAge
方法。
继承
类与传统面向对象语言的最大区别在于,JavaScript 的类是基于原型继承的。在 ECMAScript 2015 中,通过 extends
关键字可以实现类的继承。
下面来看一个例子:
-- -------------------- ---- ------- ----- --- ------- ------ - ----------------- ---- ------ - ----------- ----- ---------- - ------ - ----------- -------------- -- - ---------------- - -
我们声明了一个 Dog
类,它继承了 Animal
类的属性和方法。同时,它自己还定义了一个 sayBreed
方法。在继承的过程中,我们使用了 super
关键字调用了父类的构造函数。
通过 Dog
类,我们可以创建一个狗的实例,并调用 sayName
、sayAge
和 sayBreed
方法。
const goldenRetriver = new Dog('Tom', 2, 'Golden Retriever'); goldenRetriver.sayName(); // My name is Tom goldenRetriver.sayAge(); // I am 2 years old goldenRetriver.sayBreed(); // I am a Golden Retriever
静态方法
在类中,我们还可以定义静态方法。静态方法是类本身的方法,不属于实例对象。静态方法可能会对类进行变 更,也可能只是通过类访问一些属性或方法而已。
-- -------------------- ---- ------- ----- ---- - ------ ------ -- - ------ - - -- - ------ ----------- -- - ------ - - -- - -
我们声明了一个 Math
类,它有两个静态方法 add
和 multiply
。我们可以通过 Math.add
和 Math.multiply
访问这两个方法。
console.log(Math.add(1, 2)); // 3 console.log(Math.multiply(3, 4)); // 12
总结
类是 ECMAScript 2015 中新增的语法,它让 JavaScript 更加像传统的面向对象语言。类是一个构造函数的语法糖,它有助于优化程序结构,让代码更加清晰易于管理。在类的声明中,我们可以定义实例属性、实例方法、静态方法,也可以继承父类。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64cf4fbfb5eee0b5256ac003