본문 바로가기

카테고리 없음

[JavaScript] 객체지향4. class 1 : 객체지향언어스럽게 constructor를 만들어보자.

#0. class

- ES6에서 도입된 Constructor를 만드는 신문법이다.

- Object.create(부모)로 prototye을 지장한다고 해서 부모가 constructor가 되진 않는다. 그래서 부모를 constructor로 만드려면 이거써야함. 

- java스럽게 constructor를 생성할 수 있음

- 사용법은 다음과 같다.

// 1. class 생성하기
class 클래스명 {
    constructor() {
      // 넣고싶은 속성 여기에 넣기
    }
}

// 2. 위의 constructor 닮은 object 생성하기
var 자식오브젝트명 = new 클래스명();

 

#1. 사용해보자.

1. Parent라는 이름을 가진 class를 생성하여, 그 안에 constructor를 넣어주었다.

2. 그리고 Child라는 Parent를 빼닮은 인스턴스 생성

// 1. class 생성하기
class Parent {
constructor() {
	// 넣고싶은 속성 여기에 넣기
	this.name = "Kim";
    }
}

// 2. 위의 constructor 닮은 object 생성하기
var child = new Parent();

 

3. 잘 생성되었는지 확인하고싶다면..?

- 둘중 하나로 검사해보면 생성된 인스턴스의contructor를 확인할 수 있다. 

생성된인스턴스.__proto__;
Object.getPrototypeOf(생성된인스턴스);
child.__proto__; // 내 부모의 prototype 찾기
// 출력결과 >> {constructor: ƒ}

Object.getPrototypeOf(child); // 부모의 prototype을 출력해주세요
// 출력결과 >> {constructor: ƒ}

child.__proto__; 실행결과
Object.getPrototypeOf(child); 실행결과

 

4. Parent에 함수 넣고 싶을땐 어떻게 함?

1) constructor{} 안에 추가하거나

- 이 경우, 추가된 sayHi는 Parent의 cosntructor에 직접 추가되는거니까, child에 직접 추가되는거다.

 

2) constructor{} 밖에 추가하기

- 이 경우, sayBye는 Parent의 protype에 추가되는거다. 그래서 child에 직접 추가되진 않는다. 

- 그래도 내 부모.prototype에 있는거니까 실행은 잘된다. 

// 1. class 생성하기
class Parent {
constructor() {
	// 넣고싶은 속성 여기에 넣기
	this.name = "Kim";
    // * 함수 추가1
    // 여기에 쓰면 child가 직접 함수를 가짐
    this.sayHi = function () {
    console.log("Hi");
    };
    }
    // * 함수 추가2
    // 여기에쓰면 자식 오브젝트에 추가 안됨.
    // Parent.prototype에 추가됨.
    sayBye() {
      console.log("Bye");
    }
}

// 2. 위의 constructor 닮은 object 생성하기
var child = new Parent(); 


child; // 내속엔 뭐가 있을까? 출력결과 >> Parent {name: 'Kim', sayHi: ƒ}

child.__proto__; // 내 부모의 prototype 찾기
// 출력결과 >> {constructor: ƒ, sayBye: ƒ}

child.sayBye(); // 출력결과 >> Bye

 

 

>> 아무튼.. constructor, prototype, object.create(), class  등.. 많은 방법을 사용하는 이유중 하나는, 

비슷하게 생긴 object를 손쉽게 여러개 만들기 위해서 사용한다!