Uczymy się czym jest słówko kluczowe new, jak go używać i jak poradzić sobie z jego brakiem. Do dzieła.

Oto funkcja konstruująca:

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

let jim =  new Person("Jim", 20);

console.log(jim);
//Object { name: "Jim", age: 20 }

Teraz „zapomnijmy” o new:

let jim =  Person("Jim", 20);

console.log(jim);
//undefined

Nie działa. Napiszmy sobie newify:

function newify(func){
   return function(...args){
      return new func(...args);
   }  
}

const personFactory = newify(Person);

let john =  personFactory("John", 20);

console.log(john);
//Object { name: "John", age: 20 }

Zadziała z new i bez niego. Ale to nie wszystko – naprawmy Person, aby działało bez new:

function Person(name, age){

  if(!new.target)
      return new Person(name, age);
    
  this.name = name;
  this.age = age;
}

let jim =  Person("Jim", 20);

console.log(jim);
//Object { name: "Jim", age: 20 }

Więcej o new niebawem…