Lee Jaeyoon2
재유니버스
Lee Jaeyoon2
전체 방문자
오늘
어제
  • 분류 전체보기 (228)
    • TIL (165)
    • 생각 (11)
    • 서평 (1)
    • JavaScript & TypeScript (4)
    • React (0)
    • C (45)
    • 에러 핸들링 (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코딩 도장
  • dotenv
  • 코드숨
  • TiL
  • 변수
  • dotenv-webpack
  • JavaScript
  • 심사 문제
  • 5F
  • 코드숨 리액트
  • 회고
  • react
  • map
  • c언어
  • C언어 코딩 도장
  • 플래그
  • 코드숨 리액트 8기
  • 실수
  • 객체
  • C

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Lee Jaeyoon2

재유니버스

TIL - 20220730
TIL

TIL - 20220730

2022. 7. 30. 10:56

 오늘은 모던 JavaScript 튜토리얼에서 내장 클래스 확장하기(https://ko.javascript.info/extend-natives)에 대해 공부했다. 작성한 질문은 다음과 같다.

 코드와 함께 살펴보자.

class PowerArray extends Array {
    isEmpty() {
        return this.length === 0;
    }
}

let arr = new PowerArray(1, 2, 5, 10, 50);
alert(arr.isEmpty()); // false

let filteredArr = arr.filter(item => item >= 10);
alert(filteredArr); // 10, 50
alert(filteredArr.isEmpty()); // false

배열, 맵 같은 내장 클래스를 기존보다 확장하고자 내장 클래스를 상속받고 기능을 추가한 새 클래스를 만들어 인스턴스(객체)를 만들고 filter와 map을 사용하면 상속받은 클래스의 인스턴스를 반환한다. 또한 이 인스턴스를 구현할 때, 내부에서 인스턴스의 constructor 프로퍼티를 사용한다. 다음과 같은 코드로 관계를 확인할 수 있다.

arr.constructor === PowerArray; // true

 

 내장 객체는 정적 메서드를 상속받을 수 있지만, 내장 클래스는 정적 메서드를 상속받을 수 없다. Array와 Date는 Object를 상속받기 때문에 Object.prototype에 구현된 메서드를 사용할 수 있다. 하지만, Array.[[Prototype]], Date.[[Prototype]]은 Object를 참조하지 않기에 Array.keys()나 Date.keys()와 같은 정적 메서드를 인스턴스에서 사용할 수 없다.

 

 

'TIL' 카테고리의 다른 글

TIL - 20220801  (0) 2022.08.01
TIL - 20220731  (0) 2022.07.31
TIL - 20220729  (0) 2022.07.29
TIL - 20220728  (0) 2022.07.28
TIL - 20220727  (0) 2022.07.27
    'TIL' 카테고리의 다른 글
    • TIL - 20220801
    • TIL - 20220731
    • TIL - 20220729
    • TIL - 20220728
    Lee Jaeyoon2
    Lee Jaeyoon2

    티스토리툴바