본문 바로가기

자바스크립트 리뷰

숫자 prototype에 메소드 추가하기 [혼공자 6-2-1]

prototype에 메소드를 추가하는 방식을 쓰면 객체가 아니라 기본 자료형인 숫자나 문자열에도 메소드를 넣을 수 있다. 

 

기존에 객체에다가는 아래와 같은 형태로 eat 메소드를 추가했었다. 그러나 숫자나 문자열에는 메소드를 넣는다는 게 상상이 안되었었다.

      const pet = {
        name: '구름',
        eat (food) {
          alert(this.name + '은/는 ' + food + '을/를 먹습니다.')
        }
      }

      // 메소드를 호출합니다.
      pet.eat('밥')

 

하지만 숫자든 문자든 그 prototype에 메소드를 추가하면 해당 prototype에 속하는 모든 자료에 대해서 메소드를 사용할 수 있다.

일단 숫자에다가 넣어보자. 그 숫자를 제곱해주는 메소드다. (마지막 두 줄은 valueOf() 를 알아보기 위해 넣었다.) 

      // power() 메소드를 추가합니다.
      Number.prototype.power = function (n = 2) {
        return this.valueOf() ** n
      }

      // Number 객체의 power() 메소드를 사용합니다.
      const a = 12
      console.log('a.power():', a.power())
      console.log('a.power(3):', a.power(3))
      console.log('a.power(4):', a.power(4))

      f = 32;
      console.log(f.valueOf())

 

뭐 이미 자바스크립트에는 제곱연산자(**) 메소드가 있기 때문에 위와 같은 메소드를 쓸 일은 없을 것이다. 하지만 숫자라는 데이터 유형 자체에 대해서 다른 메소드들을 만들 수 있으므로 유용할 예정^^이다.