在我最近的javascript程序中(主要是为了娱乐和概念验证而不是其他任何东西)我有很多不同类型的对象,每种类型我都有相当数量的“实例”。所以我想我应该使用这些类,但是因为它们非常简单,我可以直接构造它们而不是使用类...
我的意思是:
//I'm making a "car" object that has the properties model, miles, value and color
//using a class like:
function car (model, miles, value, color) { .... }
//so I'd create a new car by using:
mycar = new car(model, miles, value, color);
//However for an object so simple I could also do:
mycar = {model: model, miles: miles, value: value, color: color};
我猜测后一种方法在某种程度上会更有效(没有调用类的函数),但值得吗?
决定我想知道使用类与使用常规对象的利弊。例如,类会占用更多的内存吗?
答案 0 :(得分:3)
就性能而言,添加方法时会出现差异。如果使用对象文字,则每个对象都需要为每个方法都有一个字段:
obj1--> { x: 10,
f1: method1,
f2: method2 }
obj2--> { x: 17,
f1: method1,
f2: method2 }
使用类,您可以共享共享原型背后的公共属性:
obj1--> { x:10,
__proto__: --------> { f1: method1,
} /----> f2: method2 }
|
obj2--> { x:17, |
__proto__: ---/
}
也就是说,如果您实例化一个 lot 对象并且这些对象有很多方法,并且其中许多方法都是闭包,那么性能差异只会很重要。如果我是你,我会更加强调代码样式问题:例如,使用对象文字方法,您可以使用闭包来模拟私有变量,而如果方法在共享公共原型中,则所有实例变量都需要公开
答案 1 :(得分:1)
首先,JavaScript中的there are no classes。那有什么区别?
即使某些对象不需要原型,返回普通对象的函数仍然有优势。至少,它为您提供了更改实现的灵活性,而无需更改代码库中的每个实例。因此,从简单的
开始function Car (model, miles, value, color) {
return {model: model, miles: miles, value: value, color: color};
}
(您甚至可以在没有效果的情况下使用new
调用)并在以后需要时将其扩展。