3. 네이티브_2

악음·2021년 7월 28일
0

i will know javascript

목록 보기
8/12
post-thumbnail

3.4.5 네이티브 프로토타입

내장 네이티브 생성자는각자의 prototype 객체를 가진다(Array.prototype 같은)

  • prototype 객체에는 해당 객체의 하위 타입별로 고유한 로직이 담겨있다.

원시 문자열을 박싱한 것 까지 포함하여 모든 String 객체는 기본적으로 String.prototype 객체에 정의된 메서드에 접근할 수 있다.

String 객체를 예로들자면 다음과같은 함수들이 있다.

  • String.prototype.indexOf()
  • String.prototype.charAt()
  • String.prototype.substr()
    ...등등

이중 문자열 값을 변경하는 메소드는 없다.
수정이 일어나면 기존 값으로 부터 새로운 값을 생성한다.

프로토타입 위임 덕분에 모든 문자열이 이 메서드들을 같이 쓸 수 있다.

let a ='abc '
a.indexOf("c") //3
a.toUpperCase() // 'ABC'
a.trim() // 'abc'

각 생성자 프로토타입마다 자신의 타입에 적합산 기능이 구현되어 있다.

  • Number.prototype.toFixed()
  • Array.prototype.concat()
  • Function.prototype.apply() 혹은 call()
    등을 사용할 수 있다.

그리고 프로토타입은 해당 객체의 성격을 따라간다 다음을보면

Array.prototype.push([1,2,3])
Array.prototype//(3) [1, 2, 3, constructor: ƒ, concat: ƒ, copyWithin: ƒ, fill: ƒ, find: ƒ, …]

위와같이 프로토타입객체에 푸쉬를 할수도있지만 위와같이 사용하면 안되겠다.

let a =[1,2,3,4,]
a // [1, 2, 3, 4]
let b =Array.prototype.slice.call(a)
b // [1, 2, 3, 4]

위와같이 call을 붙여서 사용하도록한다.

프로토 타입은 디폴트다

변수에 적절한 타입의 값이 할당되지 않은 상태에서 Function.prototype -> 빈함수,
Array.prototype -> 빈배열
은 모두 디폴트 값 이다.

prototype들은 이미 생성되어 내장된 상태이므로 단 한 번만 생성된다.
그리고 이 디폴트를 임의로 변경하여 사용하는 함수를 사용할경우 해당 함수를 호출 할때마다 불필요하게 prototype이 변경되므로 되므로 그만큼 cpu/메모리가 낭비된다.
그러므로 네이티브의 prototype는 절대로 변경하지말고 있는 그대로 사용하길 바란다.

3.5 정리

자바스크립트는 원시 값을 감싸는 객체 래퍼 즉 네이티브 를 제공한다 객체 래퍼에는 타입별로 쓸만한 기능이 구현되어 있다(객체의 성격과 같은 prototype)
"abc"같은 단순 스칼라 원시값이 있을 때 이값의 length프로퍼티나 String.prototype에 정의된 메서드를 호출하면 자바스크립트는 자동으로 원시값을 박싱(해당하는 객체 레퍼로감쌈)하여 피룡한 프로퍼티와 메서드를 쓸 수 있게 도와준다.

profile
RN/react.js개발자이며 배운것들을 제가 보기위해서 정리하기 때문에 비속어 오타가 있을수있습니다.

0개의 댓글