ECMAScript 是一种广泛使用的脚本语言,常用于编写 Web 应用程序。在 ECMAScript 2021 中,继承和原型链是其中最重要的概念之一。
继承
继承是一种面向对象编程的概念,它允许一个对象获取另一个对象的属性和方法。在 ECMAScript 中,继承可以通过使用 extends
关键字来实现。
基本语法
下面是一个简单的示例,演示如何使用 extends
关键字来实现继承:
-- -------------------- ---- ------- ----- ------ - ----------------- - --------- - ----- - ------- - ------------------------- ----- - --------- - - ----- --- ------- ------ - ------- - ------------------------- --------- - - --- - - --- -------------- ---------- -- -- ------- -------
在上面的代码中,我们定义了一个名为 Animal
的类,并在其中定义了一个 speak
方法。然后,我们定义了一个名为 Dog
的类,并使用 extends
关键字将其继承自 Animal
类。最后,我们创建了一个 Dog
类的实例,并调用其 speak
方法。
super 关键字
在子类中,可以使用 super
关键字来调用父类的方法。下面是一个示例:
-- -------------------- ---- ------- ----- ------ - ----------------- - --------- - ----- - ------- - ------------------------- ----- - --------- - - ----- --- ------- ------ - ------- - -------------- ------------------------- --------- - - --- - - --- -------------- ---------- -- -- ------- ----- - ------- - ------- -------
在上面的代码中,我们在 Dog
类的 speak
方法中调用了父类的 speak
方法。
继承原生对象
在 ECMAScript 中,可以继承原生对象(如 Array
、Date
等)。下面是一个示例:
-- -------------------- ---- ------- ----- ------- ------- ----- - -------------------- - --------------- - --- ------- - ------ -------- - --- ------ - ------ ---------------- - --- - - --- --- - --- ---------- -- --- ----------------------- -- -- - ---------------------- -- -- - ------------------------ -- -- -
在上面的代码中,我们定义了一个名为 MyArray
的类,并将其继承自 Array
类。然后,我们定义了 first
和 last
属性,并在 constructor
方法中调用了父类的 constructor
方法。
原型链
在 ECMAScript 中,每个对象都有一个指向其原型的指针。原型是一个对象,它包含了对象的属性和方法。当我们访问一个对象的属性或方法时,如果该对象本身没有该属性或方法,JavaScript 引擎将查找该对象的原型,以确定是否存在该属性或方法。如果该属性或方法存在于原型中,则它将被返回。如果该属性或方法不存在于原型中,则引擎将继续查找原型的原型,直到找到该属性或方法为止。这就是所谓的原型链。
原型
在 ECMAScript 中,每个对象都有一个原型。我们可以使用 Object.getPrototypeOf
方法来获取一个对象的原型。下面是一个示例:
-- -------------------- ---- ------- --- ------ - - ----- ---- -- --- ------ - - ------ ---- -- ---------------- - ------- ----------------------------------------- --- -------- -- -- ----
在上面的代码中,我们定义了一个名为 animal
的对象,并在其中定义了一个 eats
属性。然后,我们定义了一个名为 rabbit
的对象,并在其中定义了一个 jumps
属性。最后,我们将 rabbit
对象的原型设置为 animal
对象,并使用 Object.getPrototypeOf
方法来检查 rabbit
对象的原型是否为 animal
对象。
原型继承
在 ECMAScript 中,我们可以使用原型继承来实现继承。下面是一个示例:
-- -------------------- ---- ------- --- ------ - - ----- ---- -- --- ------ - - ------ ----- ---------- ------ -- ------------------------- -- -- ----
在上面的代码中,我们定义了一个名为 animal
的对象,并在其中定义了一个 eats
属性。然后,我们定义了一个名为 rabbit
的对象,并在其中定义了一个 jumps
属性。最后,我们将 rabbit
对象的原型设置为 animal
对象,并使用 rabbit.eats
来访问 animal
对象的属性。
原型链继承
在 ECMAScript 中,我们可以使用原型链继承来实现继承。下面是一个示例:
-- -------------------- ---- ------- -------- ------------ - --------- - ----- - --------------------- - ----- -------- --------- - --------- - ----- - ------------- - -------------------------------- ------------------------- - ---- ------------------- - ---------- - ------------------------- --------- -- --- - - --- -------------- -------------------- -- -- ---- ---------- -- -- ------- -------
在上面的代码中,我们定义了一个名为 Animal
的构造函数,并在其中定义了一个 eats
属性。然后,我们定义了一个名为 Dog
的构造函数,并在其中定义了一个 barks
方法。最后,我们将 Dog
的原型设置为 Animal
的原型,并使用 Object.create
方法来创建一个新对象,该对象的原型为 Animal
的原型。
结论
在 ECMAScript 2021 中,继承和原型链是非常重要的概念。掌握这些概念可以帮助你更好地理解 JavaScript 中的面向对象编程。如果你想深入了解这些概念,建议你阅读相关的文档和书籍,并编写一些示例代码来练习。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67611d7d03c3aa6a5609b957