There are several ways to create objects in JavaScript — each serving a unique purpose. From using object literals to the Object.create() method and ES6 classes, these approaches allow developers to structure data and behavior in flexible ways.
In JavaScript, how many different methods can you make an object?
Use guided tracks for structured prep, then practice company-specific question sets when you want targeted interview coverage.
The Core Idea
JavaScript is an object-oriented language built around objects and prototypes. There isn’t just one way to create an object — there are multiple, each suited to different use cases. Some are simple and declarative, while others give fine-grained control over inheritance and property configuration.
1. Object Literal Syntax
This is the simplest and most common way to create objects in JavaScript. You directly define key-value pairs inside curly braces.
// 1. Object literal
const person = {
name: 'Alice',
age: 25,
greet() {
console.log(`Hello, I am ${this.name}`);
}
};
person.greet(); // Hello, I am Alice
✅ When to use: When you need a quick, simple object with fixed structure. Ideal for configurations, settings, or small data objects.
2. Using the new Object() Constructor
The Object constructor creates an empty object, after which you can manually add properties.
// 2. Using new Object()
const user = new Object();
user.name = 'Bob';
user.age = 30;
user.greet = function() {
console.log('Hi, I am ' + this.name);
};
user.greet(); // Hi, I am Bob
✅ When to use: Rarely used in modern code — the object literal is cleaner and faster. But useful when creating objects dynamically in certain APIs or legacy systems.
3. Using a Constructor Function
Before ES6 introduced classes, constructor functions were the main way to create reusable object blueprints. You use the new keyword to create instances.
// 3. Constructor function
function Car(make, model) {
this.make = make;
this.model = model;
}
Car.prototype.start = function() {
console.log(`${this.make} ${this.model} is starting...`);
};
const car1 = new Car('Toyota', 'Corolla');
car1.start(); // Toyota Corolla is starting...
✅ When to use: When you need multiple objects of the same type that share methods. It provides structure and supports prototype-based inheritance.
4. Using ES6 Classes
Classes are syntactic sugar over constructor functions. They provide a more intuitive and readable way to define object blueprints with methods and inheritance.
// 4. Using ES6 class
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a sound.`);
}
}
const dog = new Animal('Rex');
dog.speak(); // Rex makes a sound.
✅ When to use: Perfect for creating structured, reusable object templates in modern applications. Supports clean inheritance and encapsulation.
5. Using Object.create()
Object.create() allows you to create a new object and manually specify its prototype. This is extremely powerful for prototype-based inheritance and building lightweight objects.
// 5. Using Object.create()
const prototypeCar = {
start() {
console.log('Car started');
}
};
const myCar = Object.create(prototypeCar);
myCar.make = 'Tesla';
myCar.start(); // Car started
✅ When to use: When you need fine control over inheritance or want to create an object that directly inherits from another without using classes or constructors.
6. Using Factory Functions
A factory function returns a new object each time it’s called, without using new. It’s simple and doesn’t rely on prototypes unless explicitly set.
// 6. Factory function
function createUser(name, age) {
return {
name,
age,
greet() {
console.log(`Hi, I'm ${this.name}`);
}
};
}
const user1 = createUser('Eve', 22);
user1.greet(); // Hi, I'm Eve
✅ When to use: When you need simple, self-contained object creation without worrying about prototypes or class inheritance. Common in functional programming and React-style design.
7. Using JSON.parse()
You can create objects by parsing a JSON string, commonly used when fetching data from APIs or files.
// 7. Using JSON.parse()
const jsonString = '{ "name": "Alice", "age": 25 }';
const obj = JSON.parse(jsonString);
console.log(obj.name); // Alice
✅ When to use: Ideal when receiving JSON data from a server or a configuration file. It quickly transforms string data into usable JavaScript objects.
Method | Keyword/Function | Prototype Handling | Common Use Case |
|---|---|---|---|
Object Literal | { } | Implicit (Object.prototype) | Quick object creation |
new Object() | new Object() | Implicit (Object.prototype) | Legacy/rare use |
Constructor Function | new Function() | Manual prototype linkage | Reusable templates |
ES6 Class | class ... | Automatic prototype linkage | Structured OOP |
Object.create() | Object.create() | Explicit prototype assignment | Fine control over inheritance |
Factory Function | function() | None unless manually added | Functional, flexible object creation |
JSON.parse() | JSON.parse() | Plain object (no methods) | Convert API or config data |
Think of object creation methods like different ways to build a house:
- Object literal: Prefab home — quick and easy.
- Constructor/Class: Architect-designed — reusable blueprint.
- Factory function: Custom-built home — flexible but independent.
- Object.create(): Extension — built from an existing foundation.
- JavaScript offers many ways to create objects, each with different flexibility and purpose.
- Object literals are simplest, classes and constructors handle structure and inheritance, and Object.create() gives manual control.
- Factory functions and JSON parsing fit data-driven or functional approaches.
- Choosing the right one depends on whether you need inheritance, performance, or simplicity.