与类和对象相关的 JavaScript 开销

标签 javascript class overhead

我想知道与创建新类而不是该类的新对象相关的开销是小还是大。我正在使用 dojo,但我将提供纯 JS 的示例。我将在启动时创建 10 到 100 个对象,我认为这不会是一个严重的问题,但我想涵盖所有基础。

案例 1:Javascript 对象

function Person(name){
  this.name = name;
}
var p1 = new Person('Caine');
var p2 = new Person('Seth');
var p3 = new Person('Abel');

与案例 2:Javascript 类

function Person1(){
  this.name = 'Caine';
}

function Person2(){
  this.name = 'Seth';
}

function Person3(){
  this.name = 'Abel';
}
var p1 = new Person1();
var p2 = new Person2();
var p3 = new Person3();

编辑:人们想知道为什么我会采取这种方法。我正在实现一个模块化程序,用户可以根据需要创建和/或加载对象,而不是拥有一个 Person/Shape/Text... 类并使用 50,000,000 个参数(姓名、年龄、性别、标签、字体、 x , y , w , h...) 我想创建一个包含所有值的类。这也将简化代码的编辑,因为我希望允许用户从浏览器中查看和修改代码。我对 OOP 并不陌生,而且我确实意识到这偏离了标准编程过程,因此请相信我知道自己在做什么 =)

最佳答案

并不是真正的类(JS 没有它们),但在第二个示例中你得到的是两个额外的构造函数。每个都必须有一个自己的附加 prototype 属性对象。

因此,就创建和存储对象而言,第二种方法的效率稍低。但是,如果您有大量 Person1 实例,则第二种方法可以通过将共享属性放在原型(prototype)上而不是单独放在每个新实例上来节省(少量)空间:

function Person1() {}
Person1.prototype.name= 'Caine';

为每个 Person1 实例保存一个 String 实例。

实际上,这不会产生任何实际差异,您应该编写代码封装的思想的最清晰表达。 (我个人认为每个名字都有不同的类是不寻常的......)

关于与类和对象相关的 JavaScript 开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6671176/

相关文章:

c++ - 将结构对象作为参数传递给 C++ 中的函数是一种好习惯吗?

javascript - Handlebars 动态访问变量

javascript - 我可以让我的代码更短吗?

php - 单击更改 css

iphone - -[MyClassName copyWithZone :] unrecognized selector sent to instance

javascript - 有没有一种方法可以使用 jQuery 将 HTML 定位到数组中?

c++ - static_cast 到相同类型会引入运行时开销吗?

javascript - Uncaught ReferenceError : ModuleA is not defined

javascript - Kendo UI 下拉列表在 kendoWindow 内不起作用

performance - NoSQL 数据库的开销和(低)效率?