ES6教程:掌握类的基本用法

阅读时长 4 分钟读完

在ES6之前,Javascript中没有类(Class)的概念。开发者们采用了函数套函数来实现类似于面向对象的写法。ES6引入了类的概念,让Javascript更加像一个面向对象的语言。通过这篇文章,你将学到一些基本的概念和用法,让你对ES6类更为熟悉。

构造函数

在传统的Javascript中,定义类的方式是使用函数。函数名首字母通常大写,以便于区分。函数可以接受参数,包含在函数体内,并可以在其他方法中使用。在ES6中,使用class关键字来声明新类。下面是一个例子:

-- -------------------- ---- -------
----- ------ -
  ----------------- ----- -
    --------- - -----
    --------- - -----
  -
  
  --------- -
    -----------------------
  -
  
  --------- -
    -----------------------
  -
-

这是定义一个动物(Animal)类的方式。这个类有两个属性,一个name(名字),一个type(种类)。constructor是类构造器,用来初始化实例的属性。类的方法可以放在类的内部,方法之间只需要以逗号隔开即可。上面的sayNamesayType就是两个方法。让我们看看如何使用这个类来创建对象。

使用new关键字来实例化一个Animlal的对象,同时传入初始化参数。我们发现,在实例化对象的时候,其构造器constructor自动被调用了。可以通过对象的方法来访问这两个属性。这就是类构建的时候最基础的部分,已经可以用这个框架来创建对象了。

类的继承

在许多情况下,我们会想要创建一个子类,它可以继承父类的属性和方法。在ES6中,我们可以通过extends关键字来实现继承。下面是一个例子:

-- -------------------- ---- -------
----- --- ------- ------ -
  ----------------- ----- ------ -
    ----------- ------
    ---------- - ------
  -
  
  ---------- -
    ------------------------
  -
-

--- --- - --- ----------- ------ ---------
-------------- -- ----
-------------- -- ---
--------------- -- -----

在这个例子中,我们定义了一个新类Cat,使用extends关键字来继承Animal类。super关键字用来调用父类的构造器,以便于继承类的属性。在Cat中,我们在父类的基础上添加了一个新的属性color,同时,我们也添加了一个新的方法sayColor来访问它。

静态方法

有时候,我们需要在类或子类的外部使用类的某些方法。但如果这个方法只与类本身有关,而不是实例,我们可以使用静态方法来调用。静态方法可以直接在类上调用,不需要先实例化它。下面是一个例子:

-- -------------------- ---- -------
----- ------ -
  ----------------- ----- -
    --------- - -----
    --------- - -----
  -
  
  ------ ------- -
    ------------------- ---- -- - ----------
  -
  
  --------- -
    -----------------------
  -
  
  --------- -
    -----------------------
  -
-

--------------- -- ------ ---- -- - -------

在这个例子中,我们通过static关键字来定义了一个静态方法about()。这个方法没有需要访问的实例,可以直接通过类名来调用。下面的代码展示了如何在类的外部直接调用这个静态方法。

总结

ES6的类轻易地给Javascript带来了面向对象编程的思想,我们可以通过类来定义许多对象。类可以被继承、实例化,同时可以有很多方法来访问类的属性。

在这篇文章中,我们学习了ES6的类的概念和基本用法,构造函数、类的继承、静态方法。希望这篇文章对初学者来说很有帮助。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/649a91a248841e989477ab6a

纠错
反馈