JavaScript

JavaScript Reflection

hiro1983 2015. 5. 15. 10:07
Reflection

- 런타임에 객체의 값 타입과 멤버의 구조를 밝히는 작업으로 Reflection을 이용하면 자바스크립트가 함수 오버로드를 지원하지 못하는 약점이 보완 가능 하다.


 isPrototypeOf, hasOneProperty, for/in 등... 

 


타입 판별 - typeof

- 값의 타입을 판별하는 데 가장 쉽게 사용할 수 있는 연산자.



null은 == 연산자로 구분하는 것이 좋다. typeof 연산자로는 null의 구분이 불가능하다.

typeof 연산자로 null의 타입을 출력해보면 object가 출력 된다.


undefined는 ==, typeof 두 가지의 연산자가 다 구분 가능하다.

본인이 편한 것으로 구분하면 된다.


그 외에 것들은 typeof 연산자로 구분이 가능하며, 리턴 되는 값들은 위의 그림과 같다.



상세 타입 판별 - instanceof 

- typeof의 연산 결과로 object를 반환하는 경우 그 객체의 좀 더 세부적인 타입 판별이 필요한 경우 사용한다.


 객체 instanceof 생성자 


위와 같은 구문으로 사용이 가능하며, 좌측 객체가 우측 생성자의 인스턴스인가를 확인하는 구문이다.

instanceof 연산자를 타입의 상속관계를 고려하여 결과를 반환한다.




사용자 정의 타입 판별 - toString 재정의

- Object의 프로토타입 객체에서 정의하고 있는 toString 메서드는 아래와 같은 형식의 문자열을 반환한다.


 [object 생성자명] 

 Object.prototype.toString();
 Object 객체의 경우 [object Object]를 반환한다.


사용자 정의 객체의 경우도 모두 [object Object]를 반환한다.

사용자 정의 객체릐 타입을 판별하기 위해서는 아래와 같은 작업이 필요하다.