2022.05.09 JavaScript 기본 '프로토타입'을 배웠다! [제로베이스 프론트엔드 스쿨 3기]

오늘은 새 스터디원들이 들어오고 난 첫 날~!

같이 열심히 할 사람들이 늘어나서 너무 좋다.

 

오늘은 HTML 미션 2 마무리 했다.

해결하기 힘들었던 부분이 background로 아이콘 넣기, 별점 사진 자르기 두 개 였는데

마지막까지 해결하지 못한 건 나중에 다시 보니 클래스 이름을 잘못 써서 적용이 안 됐던 거였다😂...

그래도 해결했으니 뿌듯하다!

 

과제를 하느라 모각코 시간을 다 써버려서 강의는 조금밖에 듣지 못했다😅


오늘 공부한 내용

JavaScript 기본

    프로토타입

        1. 프로토타입이란?

        2. constructor

        3. __proto__

        4. 프로토타입 체인

        5. 프로토타입 확장

 


1. 프로토타입이란?

  • 자바스크립트는 프로토타입을 기반으로 동작한다.
  • 모든 자바스크립트는 프로토타입을 가지고 있다.

 


2. constructor

  • constructor : 생성자.
  • 내가 만드는 모든 값들이 prototype을 내부적으로 갖고 있고, 이 prototype을 통해 어떠한 생성자로 생성되었는지 유추할 수 있다.
object instanceof constructor

prototype은 누구나 접근 가능하기 때문에 constructor에 바로 접근하는 것보다 instanceof를 활용하는 것이 좋다.

 


3. __proto__

  • __proto__ (던더 프로토)
  • 브라우저에서 비표준으로 제공했음.
  • 던더 프로토를 사용하면 prototype에 접근 가능
  • getter, setter(접근 제어자)와 비슷하다.
  • 던더 프로토는 사용하지 않는 것이 좋다.
  • 던더  프로토 대신 Object.getPrototypeOf / Object.setPrototypeOf 사용을 권장한다.

4. 프로토타입 체인

  • 프로토타입은 체이닝이 가능하다.
  • ex) array.hasOwnProperty(0) => true
  • hasOwnProperty는 Object의 메서드이다.
  • array < Array < Object
  • 배열도 객체가 가지고 있는 메서드를 동일하게 사용할 수 있다.
  • 간단한 객체를 만들고 여러가지 메서드를 사용할 수 있는 것도 체이닝이다.

5. 프로토타입 확장

  • 프로토타입 확장 (extends, 상속)
  • 프로토타입, 클래스 확장 가능(클래스 확장을 권장)
  • 상위 클래스 : super class
  • 하위 클래스 : sub class
  • Friends 안 Animal.call(this, name, sound); 에서 this는 Friends 를 명시적으로 바인딩 -> animal을 호출하면서 animal 생성자 함수의 this를 Friends 로 명시적 바인딩 하고 그 다음 원래 사용하던 인자들을 넘긴다.
  • 프로토 타입 확장도 시켜야 한다.
  • 프로토 타입 확장은 너무 복잡하고 까다롭지만 클래스 확장을 사용하면 간단하게 할 수 있기 때문에 클래스 확장 사용을 권장한다.
// 프로토타입 확장

function Animal(name, sound){
	this.name = name;
    this.sound = sound;
}

Animal.prototype.getInfo = function(){
	return(
    this.name + 
    '가(이)' +
    this.sound + 
    '소리를 낸다.'
	);
};

function Friends(name, sound){
	Animal.call(this, name, sound);
}

Friends.prototype = Object.create(
	Animal.prototype,
);

Friends.prototype.constructor = Friends;

const dog = new Friends('개', '멍멍');

dog instanceof Friends;	//true
dog instanceof Animal;	//true

 


오늘 내 코딩 메이트의 부트캠프가 시작됐다.

그 부트캠프 사람들 공부 시간을 보니 다시 자극이 된다.

열심히 하자 🥺