(开源代码) JavaScript 原型式面向对象的示例

JavaScript 是一门灵活的动态语言,它支持基于原型的面向对象编程。本文将介绍 JavaScript 中的原型式面向对象编程,探讨其工作原理和使用场景,并提供一些示例代码和建议。

原型式继承

在 JavaScript 中,每个对象都有一个指向另一个对象的链接,称为原型。当我们引用一个属性或方法时,如果该属性或方法不存在于对象本身,则会从原型链中查找并返回。这种机制使得我们可以通过定义一个对象来共享属性和方法,并将其用作其他对象的基础。

原型式继承是指创建一个对象并将其链接到另一个对象的原型上,从而实现继承的过程。我们可以使用 Object.create() 方法来创建一个新对象并将其原型设置为指定的对象。

下面是一个简单的示例,演示如何使用原型式继承:

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

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

在上面的示例中,我们首先定义了一个基础对象 person,它有两个属性 nameage,以及一个方法 greet。然后我们通过调用 Object.create() 方法创建了一个新对象 john,并将其原型设置为 person。最后,我们设置了 johnnameage 属性,并调用了 greet() 方法。

原型式多态

使用原型式继承可以实现一种简单的多态机制,即允许不同对象具有相同的接口。这种机制使得我们可以编写通用的代码,而无需考虑不同对象之间的具体实现。

例如,下面是一个简单的示例,演示如何使用原型式多态来实现一个通用的 print() 函数:

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

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

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

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

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

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

在上面的示例中,我们首先定义了一个基础对象 shape,它有两个方法 area()perimeter()。然后我们通过调用 Object.create() 方法创建了一个矩形对象 rectangle 和一个圆形对象 circle,并将它们的原型设置为 shape。最后,我们定义了一个通用的 print() 函数,它接受一个 shape 参数,并调用

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