JavaScript 的继承:Object.create() vs. class

阅读时长 3 分钟读完

在 JavaScript 中,实现继承的方式有很多种。其中,两种比较流行的方式是使用 Object.create()class 关键字。这篇文章将会详细介绍这两种方式的使用方法,以及它们之间的异同点。

Object.create()

Object.create() 是一个非常简单的方法,它可以用来创建一个新对象,并将该对象的原型指向另一个对象。这样一来,新对象就可以继承另一个对象的属性和方法了。

下面是一个使用 Object.create() 实现继承的示例代码:

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

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

在上面的代码中,我们定义了一个 person 对象,该对象包含一个 sayHi() 方法。然后,我们创建了一个 john 对象,并将其原型指向 person 对象。最后,我们给 john 对象添加了一个 name 属性,并调用了 sayHi() 方法。

通过 Object.create() 实现继承的好处是,可以避免修改父对象的原型,从而防止不必要的副作用。此外,由于 JavaScript 支持多层继承,因此可以通过多次调用 Object.create() 来实现复杂的继承关系。

class

class 是 ES6 中引入的一种语法糖,它可以让 JavaScript 更加类似于传统的面向对象编程语言。使用 class 定义一个类时,需要指定该类的构造函数和原型方法。

下面是一个使用 class 实现继承的示例代码:

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

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

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

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

在上面的代码中,我们定义了一个 Person 类,该类有一个 constructor() 构造函数和一个 sayHi() 原型方法。然后,我们通过 extends 关键字创建了一个 John 子类,并在子类的构造函数中调用了父类的构造函数。最后,我们创建了一个 john 对象,并调用了其 sayHi() 方法。

使用 class 实现继承的好处是,可以让代码更加清晰易懂,并且支持一些特性,如静态方法、getter 和 setter 等。

Object.create() vs. class

虽然 Object.create()class 都可以用来实现继承,但它们之间还是有很多异同点的。

首先,Object.create() 是一种较为底层的实现方式,它需要手动指定原型链。而 class 则是后来加入 JavaScript 中的一种语法糖,可以更加方便地定义类和继承关系。

其次,Object.create() 支持多层继承,而 class 只支持单层继承。如果需要实现多层继承,可以通过在构造函数中调用父类的构造函数来实现。

最后,使用 class 实现继承时,需要注意避免在子类中重写父类的方法或属性,从而导致意外的行为。而使用 Object.create() 实现继承时,则没有这个问题。

综上所述,选择使用哪种继承方式取决于具体的需求和场景。

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

纠错
反馈