大型 class 数组(包含许多未使用的方法)是否比较小的 class 数组需要更多的时间来计算?

Does an Array of a large class (with lots of unused methods) take more time to compute than with smaller classes?

我想知道以下事情:

我有一组用于 2d 游戏的“射弹”class。每个 Projectile 的工作方式都有点不同,因此需要不同的方法。我开始意识到“射弹”class 可能会爆炸并采用多达 100-200 种不同的方法。当遍历数组时,大多数射弹都不需要大多数方法,所以我想知道运行时是否会因为需要计算大量 'possible' 方法而变慢。或者,如果内存将使用大型 Classes 以大型阵列爆炸。我正在使用 Javascript 并尝试优化程序,但一般都会询问。

现在,我知道在较小的 class 中继承 Projectile Class 是有意义的(我出于其他原因正在这样做)但问题仍然存在。或者,如果这个问题根本不是问题,那么解决这个问题的最明智的方法是什么?

创建许多 big class 的实例不会增加内存使用量,因为所有方法都附加到实例原型,所以它只有一个原型(保存方法)被多个引用实例。

这里有一个演示:

class BigClass {
  method1() {}
  method2() {}
  method3() {}
  // ...
}

const instance1 = new BigClass;
const instance2 = new BigClass;

console.log(Object.getOwnPropertyNames(BigClass.prototype));
console.log(Object.getPrototypeOf(instance1) === BigClass.prototype); // true
console.log(Object.getPrototypeOf(instance1) === Object.getPrototypeOf(instance2)); // true
console.log(instance1.method1 === instance2.method1); // true

当您有构造函数时,属性会附加到实例本身,从而根据实例数量按比例增加内存使用量。

演示:

class SomeClass {
  constructor(arg1, arg2, arg3) {
    this.arg1 = arg1;
    this.arg2 = arg2;
    this.arg3 = arg3;
  }
}

const instance1 = new SomeClass({});
const instance2 = new SomeClass({});

console.log(instance1.arg1 === instance2.arg1); // false

// Note: that is not true when you pass an argument as a reference
const obj = {};

const instance3 = new SomeClass(obj);
const instance4 = new SomeClass(obj);

// In that case, obj is shared between the two instances

console.log(instance3.arg1 === instance4.arg1); // true

instance3.arg1.test = 'value';
console.log(instance4.arg1); // { test: 'value' }