是否所有面向对象的语言都会在内存中创建大量重复信息

Do all object-oriented languages create a lot of duplicate information in memory?

本文关键字:创建 信息 内存 面向对象的 语言 是否      更新时间:2023-09-26

我现在正在读一本关于JS和其他网络内容的书,这就是我遇到的关于原型关键字的内容:

prototype 关键字可以为您节省大量内存。在 User 类中,每个实例都将包含三个属性和方法。因此,如果内存中有 1,000 个这些对象,则 showUser 方法也将复制 1,000 次。但是,由于该方法在每种情况下都是相同的,因此您可以指定新对象应引用该方法的单个实例,而不是创建该方法的副本。

难道任何面向对象的语言都不是这样的行为吗?我读过一些关于C++、C#的书,但从未被告知这一点。我认为在类中创建静态方法并从非静态方法调用它们,或者这在其他语言中不是问题,我什至不应该记住这一点?

在 C# 和其他静态类型语言中,每个类用户的方法定义一次,然后该对象的每个实例化仅引用单个定义。因此,不需要与 JS 中的原型相同的构造。

原型是一种非常不同的OOP方式。

使用此范例,对象包含代码和数据。这就是为什么如果你复制对象数千次,就会有数千个方法的副本。在更常见的继承范式中,类只有对其方法的引用,该方法在对象之外。

很少有语言遵循这种范式,但Javascript就是其中之一。大多数OOP语言,如C#或C++,没有你所说的那种原型,所以它们没有这个特定的问题。