October 16, 2021
프로그래머스에서 진행하는 프론트엔드 개발을 위한 자바스크립트(feat. VanillaJS 에 참여하게 되었습니다. 자바스크립트 기본기를 탄탄하게 다져보도록 하겠습니다 🔥🔥🔥
생성자 함수란 new 연산자와 함께 호출하여 객체(인스턴스)를 생성하는 함수를 말한다. 생성자 함수에 의해 생성된 객체를 인스턴스라 한다.
function Food(name) {
this.name = name
}
const pizza = Food('pizza')
console.log(pizza.name)
위의 코드는 아래와 같은 에러가 발생합니다
VM381:1 Uncaught TypeError: Cannot read properties of undefined (reading 'name')
생성자 함수를 new 연산자와 함께 호출하지 않으면 생성자 함수가 아닌 일반 함수로서 호출됩니다. 일반 함수로 호출된 함수 내에는 반환문이 없으므로 암묵적으로 undefined를 반환합니다. 위의 코드에서 pizza 변수에는 undefined가 할당됩니다. undefined에는 name이라는 속성이 존재하지 않으므로 undefined에서 name
이라는 속성을 읽을 수 없다는 에러가 발생하는 것입니다.
추가적으로 일반함수로 호출되었을때 this에 전역 객체 window가 바인딩됩니다. 이러한 이유로 위의 코드에서 name는 전역객체의 프로퍼티로 등록됩니다
window.name // 'pizza'
name // 'pizza'
new
연산자와 함께 Food
생성자 함수를 호출하면 문제가 해결됩니다
const pizza = new Food('pizza')
console.log(pizza.name) // 'pizza'
자바스크립트 딥다이브 도서의 17.2.3
부분을 참고하여 new
연산자와 함께 생성자 함수를 호출하면 발생하는 일을 정리해보았습니다
인스턴스가 바인딩된 this가 암묵적으로 반환된다