[Javascript] Factory pattern vs Class instance
In JavaScript, the factory pattern isn't much more than a function that returns an object without using the new
keyword. ES6 arrow functions allow us to create small factory functions that implicitly return an object each time.
However, in many cases it may be more memory efficient to create new instances instead of new objects each time.
Facotry:
const createUser = ({ firstName, lastName, email }) => ({
firstName,
lastName,
email,
fullName() {
return `${this.firstName} ${this.lastName}`;
}
});
Class:
class User {
constructor(firstName, lastName, email) {
this.firstName = firstName;
this.lastName = lastName;
this.email = email;
}
fullName() {
return `${this.firstName} ${this.lastName}`;
}
}
The fullName
method is the same for all the objects that were created. By creating new instances, the fullName
method is available on the prototype instead of on the objec, which saves memory.
const user1 = new User({
firstName: "John",
lastName: "Doe",
email: "john@doe.com"
});
const user2 = new User({
firstName: "Jane",
lastName: "Doe",
email: "jane@doe.com"
});
user1.fullName === user2.fullName // true
const user1 = createUser({
firstName: "John",
lastName: "Doe",
email: "john@doe.com"
})
const user2 = createUser({
firstName: "Jane",
lastName: "Doe",
email: "jane@doe.com"
})
user1.fullName === user2.fullName // false