// 다음 동영상 강의를 참조하였다.
// https://youtu.be/r4xBtCK4JKk?list=PLG7te9eYUi7tHH-hJ2yzBJ9h6dwBu1FUy
// 자바스크립트 같은 스크립트언어는 순서대로 실행이 되고 단순함을 특징으로 하고 있다. 하지만 그 사용이 복잡해짐에 따라서 객체지향 언어의 클래스 개념이 가지는 장점이 필요해지게 된다. 반복을 줄이고 유지 보수를 편하게 해주는 그 클래스 말이다.
// 자바스크립트에서는 이 클래스의 역할을 할 수 있는 것이 바로 지금 배울 프로토타입이다. 한번 살펴보도록 하자.
// 아래는 일반적으로 우리가 사용해온 자바스크립트 객체 생성법이다. {}괄호가 쓰였다 뿐이지 []를 사용하는 배열의 정의 형태와 크게 다르지는 않다.
var person1 = { name : '임수정', age :30 } ;
var person2 = { name : '원빈', age : 40 } ;
// 다음은 프로토 타입을 생성해보자. 프로토 타입은 대문자로 시작한다는 것 빼고는 외형이 그냥 function과 다를게 없다. 다만 그 안의 내용이 생성자와 필드로 이루어져있다는 점이 다른 것이다. 잘 생각해보자 Person이라는 프로토타입은 실제로 이 틀을 이용해서 객체를 만들어내기 전까지는 작동하지 않는다. 마치 function이 호출 되지 전까지는 움직이지 않는 것과 같다. 그래서 모양이 비슷한 것이다.
function Person(name, age){
this.name = name;
this.age = age;
console.log("i am " + name + " and " + age + " old!");
};
// 자 이제 만들어진 프로토타입을 기준으로 새로운 객체를 만들어보겠다.
var person3 = new Person("김좌진", 35);
// 결과 : i am 김좌진 and 35 old!
// 아 그런데 나중에 프로토타입에 기능이나 속성을 추가시키고 싶은 생각이 들었다. 그렇다면
// *프로토타입명*.prototype.*추가할변수* = *추가할 변수에 넣을 내용*
// 의 형태로 추가하여 사용하면 된다.
Person.prototype.walk =
function (speed) {
console.log('hey i am walking! and my speed is '+ speed);
};
person3.walk(20);
// 실행 결과 : hey i am walking! and my speed is 20