diff --git a/fxjs/cjs_app.cpp b/fxjs/cjs_app.cpp
index 4648f46..ad155b7 100644
--- a/fxjs/cjs_app.cpp
+++ b/fxjs/cjs_app.cpp
@@ -102,12 +102,8 @@
 CJS_App::~CJS_App() = default;
 
 CJS_Return CJS_App::get_active_docs(CJS_Runtime* pRuntime) {
-  CJS_Document* pJSDocument = nullptr;
   v8::Local<v8::Object> pObj = pRuntime->GetThisObj();
-  if (CFXJS_Engine::GetObjDefnID(pObj) == CJS_Document::GetObjDefnID()) {
-    pJSDocument =
-        static_cast<CJS_Document*>(CFXJS_Engine::GetObjectPrivate(pObj));
-  }
+  CJS_Document* pJSDocument = JSGetObject<CJS_Document>(pObj);
   v8::Local<v8::Array> aDocs = pRuntime->NewArray();
   pRuntime->PutArrayElement(
       aDocs, 0,
@@ -398,14 +394,11 @@
     return;
 
   v8::Local<v8::Object> pObj = pRuntime->ToObject(param);
-  if (CFXJS_Engine::GetObjDefnID(pObj) != CJS_TimerObj::GetObjDefnID())
+  CJS_TimerObj* pTimer = JSGetObject<CJS_TimerObj>(pObj);
+  if (!pTimer)
     return;
 
-  CJS_Object* pJSObj = CFXJS_Engine::GetObjectPrivate(pObj);
-  if (!pJSObj)
-    return;
-
-  GlobalTimer::Cancel(static_cast<CJS_TimerObj*>(pJSObj)->GetTimerID());
+  GlobalTimer::Cancel(pTimer->GetTimerID());
 }
 
 CJS_Return CJS_App::execMenuItem(
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index 35e3e53..f5b0af4 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -354,22 +354,16 @@
   if (nLength == 9) {
     if (params[8]->IsObject()) {
       v8::Local<v8::Object> pObj = pRuntime->ToObject(params[8]);
-      if (CFXJS_Engine::GetObjDefnID(pObj) ==
-          CJS_PrintParamsObj::GetObjDefnID()) {
-        v8::Local<v8::Object> pObj = pRuntime->ToObject(params[8]);
-        CJS_Object* pJSObj = CFXJS_Engine::GetObjectPrivate(pObj);
-        if (pJSObj) {
-          CJS_PrintParamsObj* printObj =
-              static_cast<CJS_PrintParamsObj*>(pJSObj);
-          bUI = printObj->GetUI();
-          nStart = printObj->GetStart();
-          nEnd = printObj->GetEnd();
-          bSilent = printObj->GetSilent();
-          bShrinkToFit = printObj->GetShrinkToFit();
-          bPrintAsImage = printObj->GetPrintAsImage();
-          bReverse = printObj->GetReverse();
-          bAnnotations = printObj->GetAnnotations();
-        }
+      CJS_PrintParamsObj* pPrintObj = JSGetObject<CJS_PrintParamsObj>(pObj);
+      if (pPrintObj) {
+        bUI = pPrintObj->GetUI();
+        nStart = pPrintObj->GetStart();
+        nEnd = pPrintObj->GetEnd();
+        bSilent = pPrintObj->GetSilent();
+        bShrinkToFit = pPrintObj->GetShrinkToFit();
+        bPrintAsImage = pPrintObj->GetPrintAsImage();
+        bReverse = pPrintObj->GetReverse();
+        bAnnotations = pPrintObj->GetAnnotations();
       }
     }
   } else {
@@ -1109,13 +1103,8 @@
   if (!params[1]->IsObject())
     return CJS_Return(JSMessage::kTypeError);
 
-  v8::Local<v8::Object> pJSIcon = pRuntime->ToObject(params[1]);
-  if (CFXJS_Engine::GetObjDefnID(pJSIcon) != CJS_Icon::GetObjDefnID())
-    return CJS_Return(JSMessage::kTypeError);
-
   v8::Local<v8::Object> pObj = pRuntime->ToObject(params[1]);
-  CJS_Object* obj = CFXJS_Engine::GetObjectPrivate(pObj);
-  if (!obj)
+  if (!JSGetObject<CJS_Icon>(pObj))
     return CJS_Return(JSMessage::kTypeError);
 
   WideString swIconName = pRuntime->ToWideString(params[0]);
diff --git a/fxjs/cjs_runtime.cpp b/fxjs/cjs_runtime.cpp
index f867e31..96253c0 100644
--- a/fxjs/cjs_runtime.cpp
+++ b/fxjs/cjs_runtime.cpp
@@ -161,12 +161,10 @@
   v8::Context::Scope context_scope(context);
 
   v8::Local<v8::Object> pThis = GetThisObj();
-  if (pThis.IsEmpty() ||
-      CFXJS_Engine::GetObjDefnID(pThis) != CJS_Document::GetObjDefnID()) {
+  if (pThis.IsEmpty())
     return;
-  }
-  auto* pJSDocument =
-      static_cast<CJS_Document*>(CFXJS_Engine::GetObjectPrivate(pThis));
+
+  CJS_Document* pJSDocument = JSGetObject<CJS_Document>(pThis);
   if (!pJSDocument)
     return;
 
