자바스크립트 복습 4

hodu·2023년 2월 25일
0

call

call 메서드를 이용하여 this를 특정값으로 사용 할 수 있다.

updata.call(mike, 1999, "singer")를 보면
1번째는 this로 들어가고 2번째 부터는 매개 변수로 들어간다.


apply

apply는 call과 동일하지만 매개 변수를 배열로 받는다.


bind

그 값을 영구히 저장한다.

this 값을 가지고 있다가도 할당할 때 this 값을 잃어버린다.

call, apply, bind는 this값을 통제한다.

상속

(prototype)

hasOwnProperty로 자신이 갖고 있는지 확인 할 수 있다.

bmw에 car라는 것을 상속하면

_proto_라는 것을 이용해 상속되어진 것을 확인 할 수 있다.

상속은 계속 이어질 수 있다.
만약 내가 원하는 값이 없다면 상위 프로토 타입에서 찾아보지만 있다면 더이상 탐색하지 않는다.

이렇게 순서대로 올라가서 탐색 하는 것은 prototype Chain이라 합니다.

만약에 Object.keys 와 Object.values를 사용하면
상속된 값은 안나온다.

생성자와 만들어진 것을 인스턴스라고 한다.

생성자를 instanceof 메소드를 통하여 확인할 수 있다.


객체로 선언하여 프로토 타입을 넘겨주면 생성자를 확인할 수 없다.
그래서 constructor가 누군지 선언해줘야 알 수 있다.
선언하기 어렵다면, 주석의 방법으로 선언하여도 된다.

class

ES6에 추가된 스펙


기존의 함수로 생성자를 만들면 객체안에 showName이 존재하지만
class로 선언한 경우에는 _proto_안에 showName 객체가 있다.
class 문법에는 constructor안에 선언해야 같은 객체 안에 들어간다.

함수로 선언한 값은 new 제거하고 선언하면 undefined를 선언한다.
(개발자가 실수해도 undefined를 준다)

클래스는 new 제거하고 선언하면 오류가 뜬다.


class 상속

class에서 상속은 extends를 사용한다.

car class에서 선언한 것이 객체에 들어있고,
bmw에서 선언한 팍크는 프로토로 들어가 있다.
그리고 프로토 안에 프로토에 car에 선언한 함수가 들어가 있다.

동일한 이름이면 메소드를 정의하면 덮어쓴다.
부모의 메소드를 쓰면서 확장하고싶다면 super.메소드로 사용하면 된다.
이런 경우를 메소드 오버라이딩이라 한다.

부모 요소에서 파라미터로 받아주는 값이 있다면,
자식에서 super 메소드를 이용하여 그값을 받아주어야한다.

profile
잘부탁드립니다.

0개의 댓글