DEV Community

Cover image for Everything You Need to Know About new in JavaScript
Ankit
Ankit

Posted on

Everything You Need to Know About new in JavaScript

1. What does new do?

  • When you use new, Javascript:
  • Creates a new empty object: {}
  • Sets the new object's prototype to the constructor's prototype (obj.__proto__ = Constructor.prototype)
  • Runs the Constructor function with this bound to the new object
  • Returns the new object (unless the constructor explicitly returns another object)

2. Using new with a Constructor Function

function Person(name) {
  this.name = name;
}

const user = new Person("Ankit");
console.log(user.name); // "Ankit"
Enter fullscreen mode Exit fullscreen mode

If you call person("Ankit") without new:

  • It won't create a new object.
  • this will refer to the global object (or undefined in strict mode)
  • name will be set on the wrong thing → Bug! That's why new is important.

3. Using new with a Class

class Car {
  constructor(brand) {
    this.brand = brand;
  }
}

const c1 = new Car("Tesla");
console.log(c1.brand); // Tesla
Enter fullscreen mode Exit fullscreen mode

Your must use new with classes, or Js will throw an error.

4. What if the Constructor Returns Something?

  • If it returns an object, that object is returned instead of the new one.
  • If it returns a primitive (string, number, etc.), it's ignore, and the new object is returned.
function Test() {
  this.value = 10;
  return { msg: "I override!" };
}

const t = new Test();
console.log(t); // { msg: "I override!" }
Enter fullscreen mode Exit fullscreen mode

5. Built-in Objects that use new

Many built-ins in JS can be created with new:

let now = new Date();
let regex = new RegExp("abc");
let obj = new Object();
let arr = new Array(3); // [empty × 3]
Enter fullscreen mode Exit fullscreen mode

But some are fine without new:

let str = String(123); // "123"
let num = Number("5"); // 5
Enter fullscreen mode Exit fullscreen mode

6. When NOT to use new:

  • Don't use new with normal functions that are not constructors.
function greet() {
  console.log("Hello!");
}

new greet(); // Works but makes no sense → {}
Enter fullscreen mode Exit fullscreen mode

Top comments (0)