ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • prototype과 constructor말고 상속
    JavaScript ES6 2022. 5. 18. 13:46

    먼저, ES5에서 지원하는 Object.create();라는 문법이 있다.

    Object.create(프로토타입);

    이렇게 작성하면 오브젝트가 하나 남는데, create()안에 적은 프로토타입을 부모로 하는 오브젝트가 남는다.

    예를 들면,

    var 부모 = { name : 'Kim', age : 50 };
    var 자식 = Object.create(부모);
    
    console.log(자식.age); //50나옴

    이렇게, 부모라는 오브젝트를 만들어 name과 age를 넣어준 후, 자식에게 부모의 name, age를 물려받게 하고싶으면, 

    Object.create(부모)를 써서 부모를 프로토타입으로 하게 할 수 있다.

    만약, 자식을 그냥 찍으면 아무것도 나오지 않지만, 부모에 name과 age가 있기에 자식.age를 하면 값이 나오게 된다.

    자식.age= 20 이렇게 값도 다시 할당할 수 있다. 

    이는 constructor은 아니고 아래는 constructor을 만든다.

    ES6의 class를 보자.

    class 부모 {
    	constructor() {
        	this.name = 'Kim';
            this.sayHi = function(){console.log('hello')} //함수선언1
        }
        //함수선언2
        sayHi() {
        	console.log('hello')
        }
    }
    
    var 자식 = new 부모();

    위처럼 쓰면, 자식은 부모의 name : 'Kim'을 물려받는다.

    만약 함수를 추가하고싶으면 this.함수명으로 constructor안에 작성해도 되고, 밖에 함수이름()으로 작성해도 된다.

    단, 차이점은 constructor밖에 쓰면 부모의 프로토타입에 추가되므로 자식 오브젝트에 포함되지 않는다.

     

    여기서 자식.__proto__를 출력하면 부모.prototype가 나온다.

    Object.getPrototypeOf(자식)이라해도 같은 값이 나옴.

     

    마지막으로, 파라미터를 넣고싶으면 constructor () 에 파라미터를 넣어주면 된다.

    결국 class나 constructor들과 같은 객체지향 문법은 object를 여러개 만들어 쓰려고 쓴다.

     

    'JavaScript ES6' 카테고리의 다른 글

    getter / setter  (0) 2022.05.21
    super과 extends  (0) 2022.05.19
    객체지향 constructor,prototype  (0) 2022.05.17
    Primitive/Reference Data types  (0) 2022.05.17
    함수 업그레이드  (0) 2022.05.11

    댓글

Designed by Tistory.