근 4개월만에 다시 개발 공부를 해본다.
며칠 전 유튜브를 보다가 Self-Driving Car with JavaScript Course – Neural Networks and Machine Learning 라는 재밌어 보이는 프로젝트를 발견했다.
출처 : Self-Driving Car with JavaScript Course – Neural Networks and Machine Learning
영상을 틀었다. 강의하시는 분은 10분 뒤에 자바스크립트의 Class
를 이용하여 코드를 만들기 시작했고 곧 이론적 부족함을 느꼈다.
위의 프로젝트를 만들기 위해 필요한 자바스크립트 기본 지식을 정리하고자 한다.
생성자 함수는 객체라는 붕어빵
을 찍어내는 붕어빵 틀
이라고 볼 수 있다.
붕어빵 틀을 이용하여 붕어빵을 계속 찍어낼 수 있고 그때 그때 알맞게 팥이나 크림 등 다양한 재료를 넣어서 모양은 같으나 맛은 조금 다른 붕어빵들을 만들 수 있다.
function Car(name) {
this.name = name;
this.canFly = false;
}
let car = new Car("SM5");
alert(car.name); // SM5
alert(car.canFly); // false
new
연산자를 붙여 실행한다.this
에 할당한다.this
에 새로운 프로퍼티를 추가해 this
를 수정한다.this
를 반환한다.function Car(name) {
// this = {}; (빈 객체가 암시적으로 만들어진다.)
// 새로운 프로퍼티를 this에 추가한다.
this.name = name;
this.canFly = false;
// return this; (this가 암시적으로 반환된다.)
}
생성자 함수엔 보통 return
문이 없다. 반환해야 할 것들은 모두 this
에 저장되고, this
는 자동으로 반환되기 때문에 반환문을 명시적으로 써 줄 필요가 없다.
그런데 만약 return
문이 있다면 어떤 일이 벌어질까?
return
한다면 this
대신 객체
가 반환된다.return
한다면 return
문이 무시된다.return
뒤에 객체가 오면 생성자 함수는 해당 객체를 반환해주고, 이 외의 경우는 this
가 반환된다.function Animal() {
this.name = "원숭이";
return { name: "고릴라" }; // <-- this가 아닌 새로운 객체를 반환
}
alert( new Animal().name ); // 고릴라
function Animal() {
this.name = "원숭이";
return; // <-- this를 반환
}
alert( new Animal().name ); // 원숭이
아래 예시에서 new Car(name)는 프로퍼티 name과 메서드 hitTheBrake를 가진 객체를 만들어준다.
function Car(name) {
this.name = name;
this.hitTheBrake = function() {
alert( "stop..!" );
};
}
let SM5 = new User("SM5");
SM5.hitTheBrake(); // stop..!
/*
SM5 = {
name: "SM5",
hitTheBrake: function() { ... }
}
*/
이상 생성자 함수가 무엇인지에 대해 간단히 정리 해봤다. 더 자세한 내용은 아래 참조 링크를 통해 배울 수 있다.
출처 : new 연산자와 생성자 함수
Self-Driving Car with JavaScript Course – Neural Networks and Machine Learning