본문 바로가기
Frontend/JavaScript

[Javascript] 프로토타입 상속

by joy_95 2021. 12. 29.

프로토타입이란?

✔️ 다른 객체의 원형이 되는 객체 ?

✔️ 객체들이 기본적으로 가지고 있는 프로퍼티라고 생각하면 쉬운 것 같다.

✔️ 객체에서 프로퍼티를 읽으려고 하는데 없으면 이 프로토타입에서 프로퍼티를 찾게 된다.

✔️ 객체의 프로퍼티가 존재하면 프로토타입까지 탐색하지 않고 멈춘다.

hasOwnProperty 는 프로토타입에서 프로토타입의 존재 유무를 알려주는 메소드이지만

개발자가 먼저 선언해버리면 그 코드가 우선적으로 발현된다.

const user = {
  name:'Mike',
  hasOwnProperty:function(){
  	console.log('haha');
  }
};

user.hasOwnProperty();
//haha

 

 

프로토타입 상속이란?

✔️ __proto__를 통해 다른 객체의 프로퍼티를 상속시켜줄 수 있다.

const car = {
  wheels :4,
  drive:function(){
    console.log('drive..');
  }
};

const bmw = {
  color:'blue',
}

const benz = {
  color: 'red';
}

//프로토타입 상속을 통해 bmw와 benz에 car 객체에 있는 프로퍼티를 상속시켜줄 수 있다.
bmw.__proto__ = car;
benz.__proto__ = car;

 

생성자 함수에서 프로토타입 상속하기 

✔️ 생성자 함수로 객체를 만든뒤 공통적으로 필요한 프로퍼티를 prototype 을 통해 추가해줄 수 있다.

const Bmw = function(color){
  this.color = color;
}

//이 생성자 함수에 공통적인 프로퍼티를 프로토타입에 추가 시킨다.
Bmw.prototype.wheels = 4;
Bmw.prototype.drive = function(){
  console.log('drive..');
}

let x5 = new Bmw('red');
let z4 = new Bmw('blue');

console.log(x5.wheels); //4
z4.drive(); //drive..


//prototype 단축
Bmw.prototype = {
  constructor : Bmw,
  wheels : 4,
  drive(){
    console.log('drive..');
  },
};

 

for..in 반복문

✔️ 객체 자체의 프로퍼티 뿐 아니라 상속받은 프로퍼티도 모두 순회된다.

✔️ 반면 키, 값과 관련된 메서드에서는 상속받은 프로퍼티를 제외한다. (ex hasOwnProperty)

 

그래서 왜 필요한가?

✔️

Reference

반응형

'Frontend > JavaScript' 카테고리의 다른 글

[Javascript] 클래스 상속  (0) 2021.12.30
[Javascript] 클래스  (0) 2021.12.30
[Javascript] 프로퍼티 getter 와 setter  (0) 2021.12.28
[Javascript] Object - new 연산자와 생성자 함수  (0) 2021.12.28
[Javascript] Object  (0) 2021.12.27