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

时间:2015-03-07 13:45:16

标签: javascript c# c++ oop

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

  

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

不要任何面向对象的语言表现得像这样吗?我读过一些关于C ++,C#的书,从未被告知过。我认为下面是在类中创建静态方法并从非静态方法调用它们,或者它在其他语言中不是问题,我甚至不记得这个?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

很少有语言遵循此范例,但Javascript就是其中之一。大多数OOP语言,如C#或C ++,都没有你所谈论的那种原型,所以他们没有这个特殊的问题。