diff --git a/fxjs/JS_Define.h b/fxjs/JS_Define.h
index d9ab139..325642d 100644
--- a/fxjs/JS_Define.h
+++ b/fxjs/JS_Define.h
@@ -50,8 +50,8 @@
 
 template <class T>
 static void JSConstructor(CFXJS_Engine* pEngine, v8::Local<v8::Object> obj) {
-  auto pObj = pdfium::MakeUnique<T>(obj);
-  pObj->InitInstance(static_cast<CJS_Runtime*>(pEngine));
+  auto pObj = pdfium::MakeUnique<T>(obj, static_cast<CJS_Runtime*>(pEngine));
+  pObj->InitInstance();
   pEngine->SetObjectPrivate(obj, std::move(pObj));
 }
 
diff --git a/fxjs/cfxjs_engine_unittest.cpp b/fxjs/cfxjs_engine_unittest.cpp
index 5b93072..64cd3a3 100644
--- a/fxjs/cfxjs_engine_unittest.cpp
+++ b/fxjs/cfxjs_engine_unittest.cpp
@@ -43,7 +43,7 @@
   engine()->DefineObj("perm", FXJSOBJTYPE_DYNAMIC,
                       [](CFXJS_Engine* pEngine, v8::Local<v8::Object> obj) {
                         pEngine->SetObjectPrivate(
-                            obj, pdfium::MakeUnique<CJS_Object>(obj));
+                            obj, pdfium::MakeUnique<CJS_Object>(obj, nullptr));
                         perm_created = true;
                       },
                       [](v8::Local<v8::Object> obj) {
@@ -55,7 +55,7 @@
   engine()->DefineObj("temp", FXJSOBJTYPE_DYNAMIC,
                       [](CFXJS_Engine* pEngine, v8::Local<v8::Object> obj) {
                         pEngine->SetObjectPrivate(
-                            obj, pdfium::MakeUnique<CJS_Object>(obj));
+                            obj, pdfium::MakeUnique<CJS_Object>(obj, nullptr));
                         temp_created = true;
                       },
                       [](v8::Local<v8::Object> obj) {
diff --git a/fxjs/cjs_annot.cpp b/fxjs/cjs_annot.cpp
index fc38e11..4cb126d 100644
--- a/fxjs/cjs_annot.cpp
+++ b/fxjs/cjs_annot.cpp
@@ -40,7 +40,8 @@
   DefineProps(pEngine, ObjDefnID, PropertySpecs, FX_ArraySize(PropertySpecs));
 }
 
-CJS_Annot::CJS_Annot(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
+CJS_Annot::CJS_Annot(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
 
 CJS_Annot::~CJS_Annot() = default;
 
diff --git a/fxjs/cjs_annot.h b/fxjs/cjs_annot.h
index bbcf4ac..cdb884f 100644
--- a/fxjs/cjs_annot.h
+++ b/fxjs/cjs_annot.h
@@ -15,7 +15,7 @@
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_Annot(v8::Local<v8::Object> pObject);
+  CJS_Annot(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_Annot() override;
 
   void SetSDKAnnot(CPDFSDK_BAAnnot* annot) { m_pAnnot.Reset(annot); }
diff --git a/fxjs/cjs_app.cpp b/fxjs/cjs_app.cpp
index 6c04c03..9ce8dc3 100644
--- a/fxjs/cjs_app.cpp
+++ b/fxjs/cjs_app.cpp
@@ -91,8 +91,8 @@
   DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
-CJS_App::CJS_App(v8::Local<v8::Object> pObject)
-    : CJS_Object(pObject), m_bCalculate(true), m_bRuntimeHighLight(false) {}
+CJS_App::CJS_App(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
 
 CJS_App::~CJS_App() = default;
 
diff --git a/fxjs/cjs_app.h b/fxjs/cjs_app.h
index e195c6d..3c3a129 100644
--- a/fxjs/cjs_app.h
+++ b/fxjs/cjs_app.h
@@ -20,7 +20,7 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_App(v8::Local<v8::Object> pObject);
+  CJS_App(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_App() override;
 
   void TimerProc(GlobalTimer* pTimer);
@@ -153,8 +153,8 @@
   void RunJsScript(CJS_Runtime* pRuntime, const WideString& wsScript);
   void ClearTimerCommon(CJS_Runtime* pRuntime, v8::Local<v8::Value> param);
 
-  bool m_bCalculate;
-  bool m_bRuntimeHighLight;
+  bool m_bCalculate = true;
+  bool m_bRuntimeHighLight = false;
   std::set<std::unique_ptr<GlobalTimer>> m_Timers;
 };
 
diff --git a/fxjs/cjs_border.cpp b/fxjs/cjs_border.cpp
index 95693f4..77d527d 100644
--- a/fxjs/cjs_border.cpp
+++ b/fxjs/cjs_border.cpp
@@ -21,3 +21,8 @@
       pEngine->DefineObj("border", FXJSOBJTYPE_STATIC, nullptr, nullptr);
   DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
+
+CJS_Border::CJS_Border(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
+
+CJS_Border::~CJS_Border() = default;
diff --git a/fxjs/cjs_border.h b/fxjs/cjs_border.h
index b3fcef7..49e9325 100644
--- a/fxjs/cjs_border.h
+++ b/fxjs/cjs_border.h
@@ -13,8 +13,8 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_Border(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
-  ~CJS_Border() override {}
+  CJS_Border(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
+  ~CJS_Border() override;
 
  private:
   static int ObjDefnID;
diff --git a/fxjs/cjs_color.cpp b/fxjs/cjs_color.cpp
index a0cb02a..66cb972 100644
--- a/fxjs/cjs_color.cpp
+++ b/fxjs/cjs_color.cpp
@@ -121,8 +121,8 @@
   return CFX_Color();
 }
 
-CJS_Color::CJS_Color(v8::Local<v8::Object> pObject)
-    : CJS_Object(pObject),
+CJS_Color::CJS_Color(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime),
       m_crTransparent(CFX_Color::kTransparent),
       m_crBlack(CFX_Color::kGray, 0),
       m_crWhite(CFX_Color::kGray, 1),
diff --git a/fxjs/cjs_color.h b/fxjs/cjs_color.h
index 667a13c..00b9546 100644
--- a/fxjs/cjs_color.h
+++ b/fxjs/cjs_color.h
@@ -20,7 +20,7 @@
   static CFX_Color ConvertArrayToPWLColor(CJS_Runtime* pRuntime,
                                           v8::Local<v8::Array> array);
 
-  explicit CJS_Color(v8::Local<v8::Object> pObject);
+  CJS_Color(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_Color() override;
 
   JS_STATIC_PROP(black, black, CJS_Color);
diff --git a/fxjs/cjs_console.cpp b/fxjs/cjs_console.cpp
index 2b7c84a..8ed3472 100644
--- a/fxjs/cjs_console.cpp
+++ b/fxjs/cjs_console.cpp
@@ -28,7 +28,8 @@
   DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
-CJS_Console::CJS_Console(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
+CJS_Console::CJS_Console(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
 
 CJS_Console::~CJS_Console() = default;
 
diff --git a/fxjs/cjs_console.h b/fxjs/cjs_console.h
index 56243cf..c25bc4b 100644
--- a/fxjs/cjs_console.h
+++ b/fxjs/cjs_console.h
@@ -15,7 +15,7 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_Console(v8::Local<v8::Object> pObject);
+  CJS_Console(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_Console() override;
 
   JS_STATIC_METHOD(clear, CJS_Console);
diff --git a/fxjs/cjs_display.cpp b/fxjs/cjs_display.cpp
index 6970bfc..82f2f82 100644
--- a/fxjs/cjs_display.cpp
+++ b/fxjs/cjs_display.cpp
@@ -20,3 +20,8 @@
       pEngine->DefineObj("display", FXJSOBJTYPE_STATIC, nullptr, nullptr);
   DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
+
+CJS_Display::CJS_Display(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
+
+CJS_Display::~CJS_Display() = default;
diff --git a/fxjs/cjs_display.h b/fxjs/cjs_display.h
index 7b13c38..e5806b0 100644
--- a/fxjs/cjs_display.h
+++ b/fxjs/cjs_display.h
@@ -13,8 +13,8 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_Display(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
-  ~CJS_Display() override {}
+  CJS_Display(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
+  ~CJS_Display() override;
 
  private:
   static int ObjDefnID;
diff --git a/fxjs/cjs_document.cpp b/fxjs/cjs_document.cpp
index 533decf..3022519 100644
--- a/fxjs/cjs_document.cpp
+++ b/fxjs/cjs_document.cpp
@@ -123,16 +123,13 @@
   DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
-CJS_Document::CJS_Document(v8::Local<v8::Object> pObject)
-    : CJS_Object(pObject),
-      m_pFormFillEnv(nullptr),
-      m_cwBaseURL(L""),
-      m_bDelay(false) {}
+CJS_Document::CJS_Document(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
 
 CJS_Document::~CJS_Document() = default;
 
-void CJS_Document::InitInstance(IJS_Runtime* pIRuntime) {
-  SetFormFillEnv(pIRuntime->GetFormFillEnv());
+void CJS_Document::InitInstance() {
+  SetFormFillEnv(GetRuntime()->GetFormFillEnv());
 }
 
 // The total number of fields in document.
diff --git a/fxjs/cjs_document.h b/fxjs/cjs_document.h
index 179b8ef..5172df0 100644
--- a/fxjs/cjs_document.h
+++ b/fxjs/cjs_document.h
@@ -23,11 +23,11 @@
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_Document(v8::Local<v8::Object> pObject);
+  CJS_Document(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_Document() override;
 
-  // CJS_Object
-  void InitInstance(IJS_Runtime* pIRuntime) override;
+  // CJS_Object:
+  void InitInstance() override;
 
   void SetFormFillEnv(CPDFSDK_FormFillEnvironment* pFormFillEnv);
   CPDFSDK_FormFillEnvironment* GetFormFillEnv() const {
@@ -312,12 +312,12 @@
                                  v8::Local<v8::Value> vp,
                                  const ByteString& propName);
 
-  CPDFSDK_FormFillEnvironment::ObservedPtr m_pFormFillEnv;
   WideString m_cwBaseURL;
+  CPDFSDK_FormFillEnvironment::ObservedPtr m_pFormFillEnv;
   std::list<std::unique_ptr<CJS_DelayData>> m_DelayData;
   // Needs to be a std::list for iterator stability.
   std::list<WideString> m_IconNames;
-  bool m_bDelay;
+  bool m_bDelay = false;
 };
 
 #endif  // FXJS_CJS_DOCUMENT_H_
diff --git a/fxjs/cjs_event.cpp b/fxjs/cjs_event.cpp
index 341bcc4..d2537b9 100644
--- a/fxjs/cjs_event.cpp
+++ b/fxjs/cjs_event.cpp
@@ -44,7 +44,8 @@
   DefineProps(pEngine, ObjDefnID, PropertySpecs, FX_ArraySize(PropertySpecs));
 }
 
-CJS_Event::CJS_Event(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
+CJS_Event::CJS_Event(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
 
 CJS_Event::~CJS_Event() = default;
 
diff --git a/fxjs/cjs_event.h b/fxjs/cjs_event.h
index 291b6eb..434f259 100644
--- a/fxjs/cjs_event.h
+++ b/fxjs/cjs_event.h
@@ -13,7 +13,7 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_Event(v8::Local<v8::Object> pObject);
+  CJS_Event(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_Event() override;
 
   JS_STATIC_PROP(change, change, CJS_Event);
diff --git a/fxjs/cjs_field.cpp b/fxjs/cjs_field.cpp
index 1e9e389..b9bc8cb 100644
--- a/fxjs/cjs_field.cpp
+++ b/fxjs/cjs_field.cpp
@@ -171,18 +171,11 @@
   DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
-CJS_Field::CJS_Field(v8::Local<v8::Object> pObject)
-    : CJS_Object(pObject),
-      m_pJSDoc(nullptr),
-      m_pFormFillEnv(nullptr),
-      m_nFormControlIndex(-1),
-      m_bCanSet(false),
-      m_bDelay(false) {}
+CJS_Field::CJS_Field(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
 
 CJS_Field::~CJS_Field() = default;
 
-void CJS_Field::InitInstance(IJS_Runtime* pIRuntime) {}
-
 // note: iControlNo = -1, means not a widget.
 void CJS_Field::ParseFieldName(const std::wstring& strFieldNameParsed,
                                std::wstring& strFieldName,
diff --git a/fxjs/cjs_field.h b/fxjs/cjs_field.h
index 51cc530..ba47613 100644
--- a/fxjs/cjs_field.h
+++ b/fxjs/cjs_field.h
@@ -34,12 +34,9 @@
   static void DoDelay(CPDFSDK_FormFillEnvironment* pFormFillEnv,
                       CJS_DelayData* pData);
 
-  explicit CJS_Field(v8::Local<v8::Object> pObject);
+  CJS_Field(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_Field() override;
 
-  // CJS_Object
-  void InitInstance(IJS_Runtime* pIRuntime) override;
-
   bool AttachField(CJS_Document* pDocument, const WideString& csFieldName);
 
   JS_STATIC_PROP(alignment, alignment, CJS_Field);
@@ -421,12 +418,12 @@
 
   void DoDelay();
 
-  CJS_Document* m_pJSDoc;
+  CJS_Document* m_pJSDoc = nullptr;
   CPDFSDK_FormFillEnvironment::ObservedPtr m_pFormFillEnv;
   WideString m_FieldName;
-  int m_nFormControlIndex;
-  bool m_bCanSet;
-  bool m_bDelay;
+  int m_nFormControlIndex = -1;
+  bool m_bCanSet = false;
+  bool m_bDelay = false;
 };
 
 #endif  // FXJS_CJS_FIELD_H_
diff --git a/fxjs/cjs_font.cpp b/fxjs/cjs_font.cpp
index 54b392f..4d18eea 100644
--- a/fxjs/cjs_font.cpp
+++ b/fxjs/cjs_font.cpp
@@ -29,3 +29,8 @@
   ObjDefnID = pEngine->DefineObj("font", FXJSOBJTYPE_STATIC, nullptr, nullptr);
   DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
+
+CJS_Font::CJS_Font(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
+
+CJS_Font::~CJS_Font() = default;
diff --git a/fxjs/cjs_font.h b/fxjs/cjs_font.h
index 31edf06..8e52778 100644
--- a/fxjs/cjs_font.h
+++ b/fxjs/cjs_font.h
@@ -13,8 +13,8 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_Font(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
-  ~CJS_Font() override {}
+  CJS_Font(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
+  ~CJS_Font() override;
 
  private:
   static int ObjDefnID;
diff --git a/fxjs/cjs_global.cpp b/fxjs/cjs_global.cpp
index 282b262..2a91bdd 100644
--- a/fxjs/cjs_global.cpp
+++ b/fxjs/cjs_global.cpp
@@ -205,16 +205,16 @@
   DefineAllProperties(pEngine);
 }
 
-CJS_Global::CJS_Global(v8::Local<v8::Object> pObject)
-    : CJS_Object(pObject), m_pFormFillEnv(nullptr) {}
+CJS_Global::CJS_Global(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
 
 CJS_Global::~CJS_Global() {
   DestroyGlobalPersisitentVariables();
   m_pGlobalData->Release();
 }
 
-void CJS_Global::InitInstance(IJS_Runtime* pIRuntime) {
-  Initial(pIRuntime->GetFormFillEnv());
+void CJS_Global::InitInstance() {
+  Initial(GetRuntime()->GetFormFillEnv());
 }
 
 void CJS_Global::Initial(CPDFSDK_FormFillEnvironment* pFormFillEnv) {
diff --git a/fxjs/cjs_global.h b/fxjs/cjs_global.h
index 15ef603..8a2fdab 100644
--- a/fxjs/cjs_global.h
+++ b/fxjs/cjs_global.h
@@ -35,11 +35,11 @@
   static void setPersistent_static(
       const v8::FunctionCallbackInfo<v8::Value>& info);
 
-  explicit CJS_Global(v8::Local<v8::Object> pObject);
+  CJS_Global(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_Global() override;
 
-  // CJS_Object
-  void InitInstance(IJS_Runtime* pIRuntime) override;
+  // CJS_Object:
+  void InitInstance() override;
 
   CJS_Return DelProperty(CJS_Runtime* pRuntime, const wchar_t* propname);
   void Initial(CPDFSDK_FormFillEnvironment* pFormFillEnv);
diff --git a/fxjs/cjs_highlight.cpp b/fxjs/cjs_highlight.cpp
index e60a5a8..c77a80d 100644
--- a/fxjs/cjs_highlight.cpp
+++ b/fxjs/cjs_highlight.cpp
@@ -20,3 +20,9 @@
       pEngine->DefineObj("highlight", FXJSOBJTYPE_STATIC, nullptr, nullptr);
   DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
+
+CJS_Highlight::CJS_Highlight(v8::Local<v8::Object> pObject,
+                             CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
+
+CJS_Highlight::~CJS_Highlight() = default;
diff --git a/fxjs/cjs_highlight.h b/fxjs/cjs_highlight.h
index 74091d3..2815c88 100644
--- a/fxjs/cjs_highlight.h
+++ b/fxjs/cjs_highlight.h
@@ -13,8 +13,8 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_Highlight(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
-  ~CJS_Highlight() override {}
+  CJS_Highlight(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
+  ~CJS_Highlight() override;
 
  private:
   static int ObjDefnID;
diff --git a/fxjs/cjs_icon.cpp b/fxjs/cjs_icon.cpp
index 40a2936..786d19c 100644
--- a/fxjs/cjs_icon.cpp
+++ b/fxjs/cjs_icon.cpp
@@ -24,8 +24,8 @@
   DefineProps(pEngine, ObjDefnID, PropertySpecs, FX_ArraySize(PropertySpecs));
 }
 
-CJS_Icon::CJS_Icon(v8::Local<v8::Object> pObject)
-    : CJS_Object(pObject), m_swIconName(L"") {}
+CJS_Icon::CJS_Icon(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
 
 CJS_Icon::~CJS_Icon() = default;
 
diff --git a/fxjs/cjs_icon.h b/fxjs/cjs_icon.h
index a346d69..2f3ee3f 100644
--- a/fxjs/cjs_icon.h
+++ b/fxjs/cjs_icon.h
@@ -14,7 +14,7 @@
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_Icon(v8::Local<v8::Object> pObject);
+  CJS_Icon(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_Icon() override;
 
   WideString GetIconName() const { return m_swIconName; }
diff --git a/fxjs/cjs_object.cpp b/fxjs/cjs_object.cpp
index a1e5ce1..62fa421 100644
--- a/fxjs/cjs_object.cpp
+++ b/fxjs/cjs_object.cpp
@@ -40,11 +40,11 @@
     pEngine->DefineObjMethod(objId, methods[i].pName, methods[i].pMethodCall);
 }
 
-CJS_Object::CJS_Object(v8::Local<v8::Object> pObject) {
-  m_pIsolate = pObject->GetIsolate();
-  m_pV8Object.Reset(m_pIsolate, pObject);
-}
+CJS_Object::CJS_Object(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : m_pIsolate(pObject->GetIsolate()),
+      m_pV8Object(GetIsolate(), pObject),
+      m_pRuntime(pRuntime) {}
 
 CJS_Object::~CJS_Object() {}
 
-void CJS_Object::InitInstance(IJS_Runtime* pIRuntime) {}
+void CJS_Object::InitInstance() {}
diff --git a/fxjs/cjs_object.h b/fxjs/cjs_object.h
index 8254af9..c33fd77 100644
--- a/fxjs/cjs_object.h
+++ b/fxjs/cjs_object.h
@@ -10,6 +10,7 @@
 #include <memory>
 #include <utility>
 
+#include "core/fxcrt/unowned_ptr.h"
 #include "fpdfsdk/cpdfsdk_helpers.h"
 #include "fxjs/cfxjs_engine.h"
 #include "fxjs/cjs_runtime.h"
@@ -49,17 +50,19 @@
                             const JSMethodSpec methods[],
                             size_t count);
 
-  explicit CJS_Object(v8::Local<v8::Object> pObject);
+  CJS_Object(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   virtual ~CJS_Object();
 
-  virtual void InitInstance(IJS_Runtime* pIRuntime);
+  virtual void InitInstance();
 
-  v8::Local<v8::Object> ToV8Object() { return m_pV8Object.Get(m_pIsolate); }
-  v8::Isolate* GetIsolate() const { return m_pIsolate; }
+  v8::Local<v8::Object> ToV8Object() { return m_pV8Object.Get(GetIsolate()); }
+  v8::Isolate* GetIsolate() const { return m_pIsolate.Get(); }
+  CJS_Runtime* GetRuntime() const { return m_pRuntime.Get(); }
 
- protected:
+ private:
+  UnownedPtr<v8::Isolate> m_pIsolate;
   v8::Global<v8::Object> m_pV8Object;
-  v8::Isolate* m_pIsolate;
+  CJS_Runtime::ObservedPtr m_pRuntime;
 };
 
 #endif  // FXJS_CJS_OBJECT_H_
diff --git a/fxjs/cjs_position.cpp b/fxjs/cjs_position.cpp
index 16e4ab0..0e1fa66 100644
--- a/fxjs/cjs_position.cpp
+++ b/fxjs/cjs_position.cpp
@@ -23,3 +23,8 @@
       pEngine->DefineObj("position", FXJSOBJTYPE_STATIC, nullptr, nullptr);
   DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
+
+CJS_Position::CJS_Position(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
+
+CJS_Position::~CJS_Position() = default;
diff --git a/fxjs/cjs_position.h b/fxjs/cjs_position.h
index 7557f01..0f54c2b 100644
--- a/fxjs/cjs_position.h
+++ b/fxjs/cjs_position.h
@@ -13,8 +13,8 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_Position(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
-  ~CJS_Position() override {}
+  CJS_Position(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
+  ~CJS_Position() override;
 
  private:
   static int ObjDefnID;
diff --git a/fxjs/cjs_printparamsobj.cpp b/fxjs/cjs_printparamsobj.cpp
index b85925d..7cb32de 100644
--- a/fxjs/cjs_printparamsobj.cpp
+++ b/fxjs/cjs_printparamsobj.cpp
@@ -20,7 +20,8 @@
                          JSConstructor<CJS_PrintParamsObj>, JSDestructor);
 }
 
-CJS_PrintParamsObj::CJS_PrintParamsObj(v8::Local<v8::Object> pObject)
-    : CJS_Object(pObject) {}
+CJS_PrintParamsObj::CJS_PrintParamsObj(v8::Local<v8::Object> pObject,
+                                       CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
 
 CJS_PrintParamsObj::~CJS_PrintParamsObj() = default;
diff --git a/fxjs/cjs_printparamsobj.h b/fxjs/cjs_printparamsobj.h
index 97028dd..90bc9b8 100644
--- a/fxjs/cjs_printparamsobj.h
+++ b/fxjs/cjs_printparamsobj.h
@@ -14,7 +14,7 @@
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_PrintParamsObj(v8::Local<v8::Object> pObject);
+  CJS_PrintParamsObj(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_PrintParamsObj() override;
 
   bool GetUI() const { return bUI; }
diff --git a/fxjs/cjs_publicmethods.cpp b/fxjs/cjs_publicmethods.cpp
index 6f49940..b8d62b1 100644
--- a/fxjs/cjs_publicmethods.cpp
+++ b/fxjs/cjs_publicmethods.cpp
@@ -205,10 +205,11 @@
 
 }  // namespace
 
-CJS_PublicMethods::CJS_PublicMethods(v8::Local<v8::Object> pObject)
-    : CJS_Object(pObject) {}
+CJS_PublicMethods::CJS_PublicMethods(v8::Local<v8::Object> pObject,
+                                     CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
 
-CJS_PublicMethods::~CJS_PublicMethods() {}
+CJS_PublicMethods::~CJS_PublicMethods() = default;
 
 // static
 void CJS_PublicMethods::DefineJSObjects(CFXJS_Engine* pEngine) {
diff --git a/fxjs/cjs_publicmethods.h b/fxjs/cjs_publicmethods.h
index 8726996..df23eb1 100644
--- a/fxjs/cjs_publicmethods.h
+++ b/fxjs/cjs_publicmethods.h
@@ -14,7 +14,7 @@
 
 class CJS_PublicMethods : public CJS_Object {
  public:
-  explicit CJS_PublicMethods(v8::Local<v8::Object> pObject);
+  CJS_PublicMethods(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_PublicMethods() override;
 
   static void DefineJSObjects(CFXJS_Engine* pEngine);
diff --git a/fxjs/cjs_report.cpp b/fxjs/cjs_report.cpp
index 2f5490c..89737e6 100644
--- a/fxjs/cjs_report.cpp
+++ b/fxjs/cjs_report.cpp
@@ -25,7 +25,8 @@
   DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
-CJS_Report::CJS_Report(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
+CJS_Report::CJS_Report(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
 
 CJS_Report::~CJS_Report() = default;
 
diff --git a/fxjs/cjs_report.h b/fxjs/cjs_report.h
index 2a59206..8de0991 100644
--- a/fxjs/cjs_report.h
+++ b/fxjs/cjs_report.h
@@ -15,7 +15,7 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine, FXJSOBJTYPE eObjType);
 
-  explicit CJS_Report(v8::Local<v8::Object> pObject);
+  CJS_Report(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_Report() override;
 
   JS_STATIC_METHOD(save, CJS_Report);
diff --git a/fxjs/cjs_scalehow.cpp b/fxjs/cjs_scalehow.cpp
index 762863b..a29aa38 100644
--- a/fxjs/cjs_scalehow.cpp
+++ b/fxjs/cjs_scalehow.cpp
@@ -18,3 +18,8 @@
       pEngine->DefineObj("scaleHow", FXJSOBJTYPE_STATIC, nullptr, nullptr);
   DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
+
+CJS_ScaleHow::CJS_ScaleHow(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
+
+CJS_ScaleHow::~CJS_ScaleHow() = default;
diff --git a/fxjs/cjs_scalehow.h b/fxjs/cjs_scalehow.h
index 8177a3e..bbff20a 100644
--- a/fxjs/cjs_scalehow.h
+++ b/fxjs/cjs_scalehow.h
@@ -13,8 +13,8 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_ScaleHow(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
-  ~CJS_ScaleHow() override {}
+  CJS_ScaleHow(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
+  ~CJS_ScaleHow() override;
 
  private:
   static int ObjDefnID;
diff --git a/fxjs/cjs_scalewhen.cpp b/fxjs/cjs_scalewhen.cpp
index 59f0487..33f13cb 100644
--- a/fxjs/cjs_scalewhen.cpp
+++ b/fxjs/cjs_scalewhen.cpp
@@ -20,3 +20,9 @@
       pEngine->DefineObj("scaleWhen", FXJSOBJTYPE_STATIC, nullptr, nullptr);
   DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
+
+CJS_ScaleWhen::CJS_ScaleWhen(v8::Local<v8::Object> pObject,
+                             CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
+
+CJS_ScaleWhen::~CJS_ScaleWhen() = default;
diff --git a/fxjs/cjs_scalewhen.h b/fxjs/cjs_scalewhen.h
index e97a285..d068a38 100644
--- a/fxjs/cjs_scalewhen.h
+++ b/fxjs/cjs_scalewhen.h
@@ -13,8 +13,8 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_ScaleWhen(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
-  ~CJS_ScaleWhen() override {}
+  CJS_ScaleWhen(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
+  ~CJS_ScaleWhen() override;
 
  private:
   static int ObjDefnID;
diff --git a/fxjs/cjs_style.cpp b/fxjs/cjs_style.cpp
index be95e9a..2a172c9 100644
--- a/fxjs/cjs_style.cpp
+++ b/fxjs/cjs_style.cpp
@@ -21,3 +21,8 @@
   ObjDefnID = pEngine->DefineObj("style", FXJSOBJTYPE_STATIC, nullptr, nullptr);
   DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
+
+CJS_Style::CJS_Style(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
+
+CJS_Style::~CJS_Style() = default;
diff --git a/fxjs/cjs_style.h b/fxjs/cjs_style.h
index 46ab66b..ba7eefa 100644
--- a/fxjs/cjs_style.h
+++ b/fxjs/cjs_style.h
@@ -13,8 +13,8 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_Style(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
-  ~CJS_Style() override {}
+  CJS_Style(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
+  ~CJS_Style() override;
 
  private:
   static int ObjDefnID;
diff --git a/fxjs/cjs_timerobj.cpp b/fxjs/cjs_timerobj.cpp
index 59d3842..f11d3fd 100644
--- a/fxjs/cjs_timerobj.cpp
+++ b/fxjs/cjs_timerobj.cpp
@@ -21,8 +21,8 @@
                                  JSConstructor<CJS_TimerObj>, JSDestructor);
 }
 
-CJS_TimerObj::CJS_TimerObj(v8::Local<v8::Object> pObject)
-    : CJS_Object(pObject), m_nTimerID(0) {}
+CJS_TimerObj::CJS_TimerObj(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
 
 CJS_TimerObj::~CJS_TimerObj() = default;
 
diff --git a/fxjs/cjs_timerobj.h b/fxjs/cjs_timerobj.h
index edc3def..810b1b3 100644
--- a/fxjs/cjs_timerobj.h
+++ b/fxjs/cjs_timerobj.h
@@ -16,7 +16,7 @@
   static int GetObjDefnID();
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_TimerObj(v8::Local<v8::Object> pObject);
+  CJS_TimerObj(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_TimerObj() override;
 
   void SetTimer(GlobalTimer* pTimer);
@@ -25,7 +25,7 @@
  private:
   static int ObjDefnID;
 
-  int m_nTimerID;  // Weak reference to GlobalTimer through global map.
+  int m_nTimerID = 0;  // Weak reference to GlobalTimer through global map.
 };
 
 #endif  // FXJS_CJS_TIMEROBJ_H_
diff --git a/fxjs/cjs_util.cpp b/fxjs/cjs_util.cpp
index 883d022..ee96395 100644
--- a/fxjs/cjs_util.cpp
+++ b/fxjs/cjs_util.cpp
@@ -74,7 +74,8 @@
   DefineMethods(pEngine, ObjDefnID, MethodSpecs, FX_ArraySize(MethodSpecs));
 }
 
-CJS_Util::CJS_Util(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
+CJS_Util::CJS_Util(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
 
 CJS_Util::~CJS_Util() = default;
 
diff --git a/fxjs/cjs_util.h b/fxjs/cjs_util.h
index 0ad0fa1..03e1b08 100644
--- a/fxjs/cjs_util.h
+++ b/fxjs/cjs_util.h
@@ -21,7 +21,7 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_Util(v8::Local<v8::Object> pObject);
+  CJS_Util(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
   ~CJS_Util() override;
 
   static WideString printx(const WideString& cFormat,
diff --git a/fxjs/cjs_zoomtype.cpp b/fxjs/cjs_zoomtype.cpp
index 528bba0..af56732 100644
--- a/fxjs/cjs_zoomtype.cpp
+++ b/fxjs/cjs_zoomtype.cpp
@@ -23,3 +23,8 @@
       pEngine->DefineObj("zoomtype", FXJSOBJTYPE_STATIC, nullptr, nullptr);
   DefineConsts(pEngine, ObjDefnID, ConstSpecs, FX_ArraySize(ConstSpecs));
 }
+
+CJS_Zoomtype::CJS_Zoomtype(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime)
+    : CJS_Object(pObject, pRuntime) {}
+
+CJS_Zoomtype::~CJS_Zoomtype() = default;
diff --git a/fxjs/cjs_zoomtype.h b/fxjs/cjs_zoomtype.h
index 14db0a4..a5f6fda 100644
--- a/fxjs/cjs_zoomtype.h
+++ b/fxjs/cjs_zoomtype.h
@@ -13,8 +13,8 @@
  public:
   static void DefineJSObjects(CFXJS_Engine* pEngine);
 
-  explicit CJS_Zoomtype(v8::Local<v8::Object> pObject) : CJS_Object(pObject) {}
-  ~CJS_Zoomtype() override {}
+  CJS_Zoomtype(v8::Local<v8::Object> pObject, CJS_Runtime* pRuntime);
+  ~CJS_Zoomtype() override;
 
  private:
   static int ObjDefnID;
