我正在编写一个广泛使用特定形式的数据集的 JavaScript 应用程序,例如
{ foo: 'foo', bar: 'bar', quz: { baz : 'baz' }}
这只是数据,但它是嵌套的。没有静态数据。
我想为该数据集创建一个模板以保持代码整洁。我可以将模板对象放在某处并每次都克隆它,例如(仅使用 jquery 作为示例)
var ds = jQuery.extend(true, {}, config.dataset);
或者我可以创建一个可以调用的“类”或函数原型(prototype)
var ds = new Dataset();
什么表现最好?如果使用 new
构造函数,类和函数定义之间有区别吗?
最佳答案
“什么性能最好?”的答案通常是:如果以及何时您确实存在性能问题,请担心它。
“什么表现最好?”的答案在 JavaScript 中是:
查看一般答案,并且
这取决于,在您的目标 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/