instanceof
만으로 해결하려 했으나, 해당 코드는 원시타입primitive
에는 의도한대로 동작하지 않는다는 점을 알게되었음, 추가로
객체가 해당 클래스의 메서드에 접근할 수 있다면 그 클래스의 인스턴스로 간주된다
라는 지문을 발견하여 예외 처리를 모두 해주기로 함
function checkIfInstanceOf(obj: any, classFunction: any): boolean {
// 예외처리
if (obj === null || obj === undefined || typeof classFunction !== 'function') {
return false;
}
// 원시 타입 핸들링
if (typeof obj !== 'object' && typeof obj !== 'function') {
obj = Object(obj); // 원시 타입을 객체로 변환
}
// 같은 instance인지 확인
if (obj instanceof classFunction) {
return true;
}
// 해당 클래스의 메서드에 접근할 수 있다면 그 클래스의 인스턴스로 간주된다 처리
return Object.getPrototypeOf(obj) === classFunction.prototype || classFunction.prototype.isPrototypeOf(obj);
}