In JavaScript, a constructor function is used to create and initialize objects.
Here is a simple example of a constructor function. Read the rest of the tutorial for more.
Example
// constructor function function Person () { this.name = "John", this.age = 23 } // create an object const person = new Person(); // print object attributes console.log(person.name); console.log(person.age); // Output: // John // 23
Here, Person()
is an object constructor function. And, we use the new
keyword to create an object from a constructor function.
Create Multiple Objects With Constructor Function
In JavaScript, you can create multiple objects from a constructor function. For example,
// constructor function function Person () { this.name = "John", this.age = 23, this.greet = function () { console.log("hello"); } } // create objects const person1 = new Person(); const person2 = new Person(); // access properties console.log(person1.name); // John console.log(person2.name); // John
In the above program, we created two objects (person1 and person2) using the same constructor function.
In JavaScript, when this keyword is used in a constructor function, this
refers to the specific object in which it is created. For example,
// constructor function function Person () { this.name = "John" } // create object const person1 = new Person(); // access properties console.log(person1.name); // John
Hence, when an object accesses the name property of the constructor function, it can directly access it as person1.name
.
JavaScript Constructor Function Parameters
You can also create a constructor function with parameters. For example,
// constructor function with parameters function Person (person_name, person_age, person_gender) { // assign parameter values to the calling object this.name = person_name, this.age = person_age, this.gender = person_gender, this.greet = function () { return (`Hi ${this.name}`); } } // create objects and pass arguments const person1 = new Person("John", 23, "male"); const person2 = new Person("Sam", 25, "female"); // access properties console.log(person1.name); // John console.log(person2.name); // Sam
In the above example, we have passed arguments to the constructor function during the creation of the object.
const person1 = new Person("John", 23, "male"); const person2 = new Person("Sam", 25, "female");
This allows each object to have different properties:
person1 | person2 |
---|---|
name holds the value John . | name holds the value Sam . |
age holds the value 23. | age holds the value 25. |
gender holds the value male . | gender holds the value female . |
Constructor Function vs. Object Literal
Object literals are used to create a single object.
On the other hand, constructor functions are useful if you want to create multiple objects. For example,
// use object literal to create // a single object person let person = { name: "Sam" } // use constructor function function Person () { this.name = "Sam" } // create multiple objects // from constructor function let person1 = new Person(); let person2 = new Person();
Objects created from constructor functions are unique. Thus, you can add a new property to a particular object that isn't accessible to other objects. For example,
// use constructor function function Person () { this.name = "Sam" } let person1 = new Person(); let person2 = new Person(); // add new property to person1 person1.age = 20; // add a method to person1 object person1.greet = function () { return "hello"; } console.log(person1.age); // 20 console.log(person1.greet()); // hello console.log(person2.age); // undefined console.log(person2.greet()); // ERROR!
Here, the age property and the greet()
method are unique to person1 and are thus unavailable to person2.
On the other hand, when an object is created with an object literal, any object variable derived from that object will act as a clone of the original object.
Hence, changes you make in one object will be reflected in the other. For example,
// use object lateral let person = { name: "Sam" } console.log(person.name); // Sam // assign person object to student variable let student = person; // change the property of student object student.name = "John"; // add method to student object student.greet = function () { return "hello"; } // original object property is also changed console.log(person.name); // John // original object now has the greet() method console.log(person.greet()); // hello
JavaScript Built-In Constructors
JavaScript also has built-in constructors to create objects of various types. Some of them are:
Constructor | Description |
---|---|
Object() | Creates a new object with properties and methods. |
String() | Constructs a string object for manipulating and representing textual data. |
Number() | Constructs a number object for handling data and operations. |
Boolean() | Constructs a boolean object representing true or false values for logical operations. |
Example: JavaScript Built-In Constructors
// use Object() constructor to create object const person = new Object({ name: "John", age: 30 }); // use String() constructor to create string object const name = new String ("John"); // use Number() constructor to create number object const number = new Number (57); // use Boolean() constructor to create boolean object const count = new Boolean(true); console.log(person); console.log(name); console.log(number); console.log(count);
Output
{ name: 'John', age: 30 } [String: 'John'] [Number: 57] [Boolean: true]
Note: You should not declare strings, numbers, and boolean values as objects because they slow down the program. Instead, declare them as primitive types using code such as let name = "John"
, let number = 57
, etc.
More on Constructor Functions
You can also add properties and methods to a constructor function using a prototype. For example,
// constructor function function Person () { this.name = "John", this.age = 23 } // create objects let person1 = new Person(); let person2 = new Person(); // add a new property to the constructor function Person.prototype.gender = "Male"; console.log(person1.gender); // Male console.log(person2.gender); // Male
To learn more about prototypes, visit JavaScript Prototype.
In JavaScript, the class
keyword was introduced in ES6 (ES2015) to provide a more convenient syntax for defining objects and their behavior.
Classes serve as blueprints for creating objects with similar properties and methods. They resemble the functionality of constructor functions in JavaScript.
To learn more, visit JavaScript Classes.
Also Read: