JS 확장된 typeof 검사

Java Script 2009. 7. 7. 11:34
□ toString() 메서드는 사용자가 정의한 클래스에 대해서는 작동하지 않기 때문에
   classname이라는 문자열 프로퍼티를 검사하고 존재한다면 그 값을 반환한다.
function getType(x) {
   // 만약 x가 null이면 'null'을 반환한다.
   if(x == null) return 'null';

   // 그 다음 typeof 연산을 시도한다.
   var t = typeof x;
   // 만약 결과가 모호하지 않으면, 그 결과값을 반환한다.
   if(t != "object") return t;

   // 그 외에 x는 객체다. 객체의 클래스 값을 얻기 위해 기본 toString()
   // 메서드를 사용한다.
   var c = Object.prototype.toString.applay(x);  // '[object class]' 를 반환한다.
   c = c.substring(8, c.length-1);

   // 만약 모호한 클래스가 아니라면, 그 값을 반환한다.
   if(c != "Object") return c;

   // 만약 여기서 c가 'Object'라는 결과를 얻으면, 여기로 온다.
   // x가 실제로 그냥 일반적인 객체인지 검사한다.
   if(x.constructor == Object) return c;   // 좋다. 타임은 정말 'Object'이다.

   // 사용자가 정의한 클래스를 위해서 객체의 프로토타입에서 상속받았으며
   // 문자열 값을 가진 classname이라는 프로퍼티를 찾는다.
   if("classname" in x.constructor.prototype &&                     // classname을 상속받는다.
       typeof x.constructor.prototype.classname == "string")  // 이것은 문자열이다.
       return x.constructor.prototype.classname;
   
   // 만약 무엇인지 밝혀낼 수 없다면, 이 사실을 알려준다.
   return "";
}
posted by 느릅나무™