发布于 2026-01-06 0 阅读
0

经典继承与原型继承 面向对象 经典继承 原型继承 原型继承的机制 结论 希望对您有所帮助

古典继承与原型继承

面向对象

古典继承法

原型继承

原型继承的机制

结论

希望这对您有所帮助。

注意补充水分

鞋类示例

面向对象

物体是对我们现实世界中与之互动的物理事物的抽象(或描述性表征)。现实世界中的一些事物比其他事物更相似。例如,靴子与拖鞋的共同点远比与树的共同点多。把靴子和拖鞋都称为“鞋”并不奇怪。我们几乎在不知不觉中就一直在进行这种心理分类。

面向对象编程的目的在于尽可能地模拟现实世界中的这些类别。认识到对象之间的相似之处固然重要,但我们也必须认识到它们之间的差异。让我们进一步探讨一下鞋子的例子。

我们来探讨一下鞋子的共同属性和特性:尺码、颜色和材质。我们可以改变鞋子的颜色,鞋子也会磨损。

鞋类示例

就像我们在现实中所做的那样,我们可以根据鞋子的共同点对所有鞋子进行分类,并创造出无数个独立的鞋子副本,这些鞋子继承了所有鞋子所具有的所有特征,但同时也具有自己独特的特征。

在这种情况下,“鞋子”被称为概括;换句话说,它是对现实世界物品的更一般、更不具体的描述。

鞋类示例

古典继承法

在经典继承中,对象仍然是对现实世界“事物”的抽象,但我们只能通过来引用对象。类是对对象的概括。换句话说,类是对现实世界事物的抽象。(因此,类是对现实世界事物的抽象的抽象)。由于一个类是对其前身的又一次引用(或抽象),因此每个子类都会提高抽象层次,从而提高概括层次。

鞋类示例

原型继承

与经典继承不同,原型继承不涉及抽象层次的增加。对象要么是对现实世界事物的抽象(与之前相同),要么是另一个对象的直接副本(换句话说,就是原型)。对象可以凭空创建,也可以由其他对象创建:

鞋类示例

这一点很重要!这意味着泛化(例如鞋子这个总体概念)本质上也是对象。在经典继承中,泛化是抽象的抽象的抽象……一直延续到最近的后代。

这里的抽象级别永远不会超过 1;原型继承中发生的唯一抽象就是从现实世界中抽象出来

原型继承相比经典继承具有一些关键优势:

鞋类示例

原型继承的机制

构造器

在 JavaScript 中,所有对象都有一个构造函数。在 JavaScript 类中,我们使用构造函数来创建和实例化类中的新对象。每个类只能有一个构造函数。在上面的示例中,我们实例化了每个鞋子对象,并赋予它们所有鞋子对象共有的特征(所有鞋子都具有尺寸、颜色和材质)。

您可以访问MDN深入了解构造函数(如何查看对象的类、如何更改类等)

新运营商

根据MDN 文档, New 运算符执行以下操作:

  1. 创建一个空白的纯 JavaScript 对象;
  2. 将此对象的构造函数链接到另一个对象;
  3. 将步骤 1 中新创建的对象作为 this 上下文传递;
  4. 如果函数不返回自身对象,则返回此值。

要实例化一个 JavaScript 类的原型,我们使用关键字 `__init__` new。在上面的示例中,我们定义了新对象的名称let slipper,并使用 `__init__` 创建它new。然后,我们传入在 `Shoe` 类的构造函数中定义的参数。这些新实例化的对象被称为类型slipper.size。之后,您可以通过调用 `__init__`或 `__properties` 等方法来访问对象的任何属性slipper.color

鞋类示例

结论

经典继承和原型继承之间的区别很快就会变得相当复杂。如果您想更深入地研究这些概念,不妨阅读Aadit M Shah 的著作《为什么原型继承很重要》 。

注意补充水分

希望这对您有所帮助。

但你知道还有什么很有用吗……一个崭新的机械键盘
如果你对好的机械键盘感兴趣,就点击这里。

或者点击这里查看另一个很棒的选项

或者,也许你已经有了一个不错的,但你想稍微改进一下(你知道我就是这么做的)。

文章来源:https://dev.to/crishanks/classical-vs-prototypal-inheritance-2o5a