If we need to create multiple object of same shape then one of the way to define the shape of is by using the function.
function createPerson(name) {
const obj = {};
obj.name = name;
obj.introduceSelf = function () {
console.log(`Hi! I'm ${this.name}.`);
};
return obj;
}
we have to create an empty object, initialize it, and return it. A better way is to use a constructor. A constructor is just a function called using the new keyword. When you call a constructor, it will
- create a new object
- bind
this
to the new object, so you can refer tothis
in your constructor code - run the code in the constructor
- return the new object.
function Person(name) {
this.name = name;
this.introduceSelf = function () {
console.log(`Hi! I'm ${this.name}.`);
};
}
To call Person()
as a constructor, we use new
:
const salva = new Person("Salva");
salva.name;
salva.introduceSelf();
const frankie = new Person("Frankie");
frankie.name;
frankie.introduceSelf();
Return from constructors
Usually, constructors do not have a return
statement. Their task is to write all necessary stuff into this
, and it automatically becomes the result.
But if there is a return
statement, then the rule is simple:
- If
return
is called with an object, then the object is returned instead ofthis
. - If
return
is called with a primitive, it’s ignored.
In other words, return
with an object returns that object, in all other cases this
is returned.
For instance, here return
overrides this
by returning an object:
function BigUser() {
this.name = "John";
return { name: "Godzilla" }; // <-- returns this object
}
alert( new BigUser().name ); // Godzilla, got that object
Methods in constructor
Using constructor functions to create objects gives a great deal of flexibility. The constructor function may have parameters that define how to construct the object, and what to put in it.
Of course, we can add to this
not only properties, but methods as well.
For instance, new User(name)
below creates an object with the given name
and the method sayHi
:
function User(name) {
this.name = name;
this.sayHi = function() {
alert( "My name is: " + this.name );
};
}
let john = new User("John");
john.sayHi(); // My name is: John
/*
john = {
name: "John",
sayHi: function() { ... }
}
*/
Conclusion
We can use constructor functions to make multiple similar objects.
JavaScript provides constructor functions for many built-in language objects: like Date
for dates, Set
for sets
Reference
developer.mozilla.org
javascript.info