Recently while solving a problem, I came across a requirement to create a property in a JavaScript class, which needs to be shared by all the object instances. In the programming world, these types of properties are called Static Properties.
There are various scenarios when you need a static member property:
- When counting number of object instances created from a particular class
- When logging some information at the class level instead of object instance level, etc.
To create a static property, you should know two important things:
- A JavaScript class cannot have a member property. You can only create it using a constructor
- Like the function constructor, a JavaScript class also has a prototype
Well, if you are a champion of prototypes, you must have guessed the answer in your mind by this time. Any way, let us move forward to see the implementation,
class Foo { constructor(goal) { this.goal = goal; Foo.prototype.objectcount++; } } Foo.prototype.objectcount = 0;
Let us talk through the implementation of Foo class,
- We added a property to the Foo class prototype
- Incremented it in the constructor, as the constructor would be called each time an object is created
Essentially to create a static property member, add a property to class prototype object. Now, creating an instance of Foo class,
let f1 = new Foo(78); console.log(f1.objectcount); // 1 let f2 = new Foo(45); console.log(f2.objectcount)// 2 let f3 = new Foo(45); console.log(f3.objectcount)// 2 console.log(f1.objectcount === f2.objectcount);// true console.log(f2.objectcount === f3.objectcount);// true
You can see that now objectcount keeps a track of the count of all the objects. It is the same for all the object instances as well, hence, it can be termed as a static member property of a JavaScript class.
I hope you find this quick tip useful.