javascript - javascript 类定义与对象的性能

标签 javascript performance class prototype

我正在编写一个广泛使用特定形式的数据集的 JavaScript 应用程序,例如

{ foo: 'foo', bar: 'bar', quz: { baz : 'baz' }}

这只是数据,但它是嵌套的。没有静态数据。

我想为该数据集创建一个模板以保持代码整洁。我可以将模板对象放在某处并每次都克隆它,例如(仅使用 jquery 作为示例)

var ds = jQuery.extend(true, {}, config.dataset);

或者我可以创建一个可以调用的“类”或函数原型(prototype)

var ds = new Dataset();

什么表现最好?如果使用 new 构造函数,类和函数定义之间有区别吗?

最佳答案

“什么性能最好?”的答案通常是:如果以及何时您确实存在性能问题,请担心它。

“什么表现最好?”的答案在 JavaScript 中是:

  1. 查看一般答案,并且

  2. 这取决于,在您的目标 JavaScript 引擎(浏览器等)上进行测试

不过,让我们忽略性能,看看您提供的替代方案。

实现DataSet“类”(构造函数和关联的原型(prototype),无论使用新语法还是旧语法)将非常复杂,并且对您所描述的用例几乎没有任何好处。您有一个嵌套的对象结构:

{ foo: 'foo', bar: 'bar', quz: { baz : 'baz' }}

...所以如果您使用它作为原型(prototype),那么实例之间的串扰将非常容易。示例:

// Demonstrating cross-talk
function DataSet() {
}
DataSet.prototype = { foo: 'foo', bar: 'bar', quz: { baz : 'baz' }};

var d1 = new DataSet();
var d2 = new DataSet();
d1.quz.baz = "updated";
document.body.innerHTML = d2.quz.baz; // "updated" - huh?!

为了避免这种情况,您必须在构造时复制 quz 属性:

function DataSet() {
    this.quz = jQuery.extend(true, {}, this.quz);
}

然后,每当您在原型(prototype)中添加新的嵌套对象时,您都必须记住这样做。

根据您告诉我们的情况,最简单的解决方案就是将您的第一个示例与 jQuery.extend 一起使用。

关于javascript - javascript 类定义与对象的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33147510/

相关文章:

javascript - 为什么要在删除之前检查元素/属性?

javascript - 更新 : USER ERROR - TYPO ! ! grunt-contrib-coffee 查找文件和写入目标时出错

performance - JPA entitymanager 删除操作性能不佳

C#:定义类变量、默认值和获取设置不起作用?

javascript - 页面渲染成功后,对象不是有效组件

javascript - 在另一个 HTML 页面中创建 HTML 页面的 Webview 预览

c++ - Linux 与 Windows,C++ 运行时读取 CSV 文件的性能差异

iphone - 如何使用Core Data有效保存UI/主线程中所做的更改?

具有实现自己泛型参数的泛型参数的 Java 抽象类

C++ - 高级多态性 : Is this function legal for removing pointers from a list?