Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Javascript classes vs objects, pros and cons?

In my most recent javascript program (which is mostly for fun and proof-of-concept than anything else) I have a lot of different kinds of objects and of each kind I'd have a fair amount of "instances". So I was thinking I should use classes for these, however since they are very simple I could simply construct them directly instead of using classes...

Example of what I mean:

//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};

I'm guessing the latter method would be more efficient in some way (no call to the class's function), but is it worth it?

To decide that I'd like to know about pros and cons of using classes vs using regular objects. Like do classes take up significantly more memory for example?

like image 871
Wingblade Avatar asked Oct 04 '13 15:10

Wingblade


1 Answers

In terms of performance, the difference comes when you add methods. If you use object literals each object needs to have a field for each method:

obj1--> { x: 10,
          f1: method1,
          f2: method2 }

obj2--> { x: 17,
          f1: method1,
          f2: method2 }

With classes, you can share common properties behind a shared prototype:

obj1--> { x:10,
          __proto__: --------> { f1: method1,
         }              /---->   f2: method2 }
                        |
obj2--> { x:17,         |
          __proto__: ---/
        }

That said, the performance differences are only going to matter if you instantiate a lot of objects and those objects have many methods and many of those methods are closures. If I were you I would give a greater emphasis to code style issues: for example, with the object literal method you can use closures to simulate private variables while if the methods are in a shared public prototype then all your instance variables need to be public.

like image 132
hugomg Avatar answered Sep 21 '22 21:09

hugomg