47. Number 인스턴스 생성, 인스턴스 형태
Number 인스턴스 생성
new Number()
구분 | 데이터(값) |
---|---|
파라미터 | 값opt |
반환 | 생성한 Number 인스턴스 |
빌트인 Number 오브젝트로
새로운 Number 인스턴스를 생성
var obj = new Number("123"); console.log(obj.valueOf()); // 123
- 빌트인 Number 오브젝트로 인스턴스를 생성하여 반환
- 파라미터 값이 문자열이면 숫자로 변환하여
- 생성한 인스턴스에 파라미터 값을 설정
Number(“123”) 이면 문자열 “123”을 숫자 123으로 변환합니다.
거기에 new 연산자를 붙여 인스턴스를 생성한 것입니다.
이렇게 생성된 인스턴스에valueOf()
메서드를 실행하면 할당된 값을 반환합니다.
- 인스턴스 형태
window.onload = function () {
"use strict"
debugger;
var numberObject = Number;
var obj = new Number("123");
/*
1. 새로 생성한 Number 인스턴스가 obj에 할당됩니다.
2. 오른쪽 local 의 obj를 펼칩니다.
1) __proto__가 있으며
2) [[primitiveValue]]: 123이 있습니다.
*/
debugger;
var proto = obj.__proto__;
/*
3. __proto__ 를 펼칩니다.
- 표시된 것은 빌트인 Number 오브젝트의 함수입니다.
4. Number 인스턴스를 생성하는 목적은
- 표시된 함수를 사용하기 위해서입니다.
5. 인스턴스를 생성하지 않고 다른 방법으로
- 함수를 사용할 수도 있습니다.
*/
}
obj 에는 __proto__
와 [[primitiveValue]]
말고는 없습니다.
나머지 빌트인 Number 오브젝트 관련된 것들은 하나도 없습니다. 바로 이것입니다.
인스턴스를 만들면 빌트인 Number 오브젝트에 있는 프로퍼티가 하나도 obj 로 넘어오지 않습니다.
단, 인스턴스에 설정되는 것이 있습니다.
obj 의 __proto__
를 전개해보면 7개의 함수가 들어있는 것을 볼 수 있습니다.
이 함수들은 어디서왔을까요?
빌트인 Number 오브젝트?
아닙니다. 없습니다.
그럼 어디서 넘어온 것이냐.
바로 Number.prototype에 있습니다.
Number.prototype이랑 obj.__proto__에 있는 거랑 똑같습니다.
바로 이겁니다.
인스턴스를 만드는 기준은 prototype
이라는 오브젝트를 기준으로 해서 여기에 연결되어있는 것만 가져옵니다.
prototype
과 같은 레벨에있는 isNaN 같은 것들은 인스턴스에 가져오지 않습니다.
빌트인 Number 오브젝트를 복사해서 주긴 주지만, prototype에 있는 것만 주는 겁니다.
그럼 나머지는 어떻게하냐.
그건 원본을 통해서 보라는 겁니다.
이것이 바로 인스턴스입니다.
정리
- 인스턴스를 만드는 기준은 prototype 입니다. prototype 에 연결되어있는 함수들을 복사해서 주는 것입니다.
- prototype 이 아닌 다른 것들은 복사를 안해줍니다. 이것이 인스턴스를 만드는 기준입니다.
__proto__
이 또한 오브젝트입니다.
해당 __proto__
안에도 { key: value } 프로퍼티 형태로 프로퍼티가 담겨져있기 때문입니다.
즉, prototype
안의 내용(프로퍼티)들을 인스턴스의 __proto__
오브젝트로 그대로 주겠다는 겁니다.