JavaScript 是一门灵活的动态语言,它支持基于原型的面向对象编程。本文将介绍 JavaScript 中的原型式面向对象编程,探讨其工作原理和使用场景,并提供一些示例代码和建议。
原型式继承
在 JavaScript 中,每个对象都有一个指向另一个对象的链接,称为原型。当我们引用一个属性或方法时,如果该属性或方法不存在于对象本身,则会从原型链中查找并返回。这种机制使得我们可以通过定义一个对象来共享属性和方法,并将其用作其他对象的基础。
原型式继承是指创建一个对象并将其链接到另一个对象的原型上,从而实现继承的过程。我们可以使用 Object.create()
方法来创建一个新对象并将其原型设置为指定的对象。
下面是一个简单的示例,演示如何使用原型式继承:
-- -------------------- ---- ------- -- -------- --- ------ - - ----- --- ---- -- ------ -------- -- - ------------------- -- ---- -- ------------ --- --- ----------- ----- ------- - -- -- ------------ ------ --- ---- - ---------------------- --------- - ------- -------- - --- ------------- -- --------- -- ---- -- ---- --- --- -- ----- ----
在上面的示例中,我们首先定义了一个基础对象 person
,它有两个属性 name
和 age
,以及一个方法 greet
。然后我们通过调用 Object.create()
方法创建了一个新对象 john
,并将其原型设置为 person
。最后,我们设置了 john
的 name
和 age
属性,并调用了 greet()
方法。
原型式多态
使用原型式继承可以实现一种简单的多态机制,即允许不同对象具有相同的接口。这种机制使得我们可以编写通用的代码,而无需考虑不同对象之间的具体实现。
例如,下面是一个简单的示例,演示如何使用原型式多态来实现一个通用的 print()
函数:
-- -------------------- ---- ------- -- -------- --- ----- - - ----- -------- -- --- ---------- -------- -- -- -- -- -------- --- --------- - --------------------- --------------- - -- ---------------- - -- -------------- - -------- -- - ------ ---------- - ------------ -- ------------------- - -------- -- - ------ - - ----------- - ------------- -- -- -------- --- ------ - --------------------- ------------- - -- ----------- - -------- -- - ------ ------- - ----------- - ------------ -- ---------------- - -------- -- - ------ - - ------- - ------------ -- -- ------- ------- -- -------- ------------ - ------------------ ---------------- ---------- ----------------------- - -- -- ------- ------------ --------------- - -- ---------------- - -- ----------------- -- -------- --- ---------- -- ------------- - -- -------------- -- -------- ------------------- ---------- ------------------
在上面的示例中,我们首先定义了一个基础对象 shape
,它有两个方法 area()
和 perimeter()
。然后我们通过调用 Object.create()
方法创建了一个矩形对象 rectangle
和一个圆形对象 circle
,并将它们的原型设置为 shape
。最后,我们定义了一个通用的 print()
函数,它接受一个 shape
参数,并调用
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/30261