공부/공부(코딩)

자바스크립트>문법> "프로토타입은 스크립트 언어의 클래스다."

Quill 2018. 2. 3. 15:23

// 다음 동영상 강의를 참조하였다.

// 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






반응형