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…