diff --git a/fxjs/cjs_v8.cpp b/fxjs/cjs_v8.cpp
index b4f7fb1..7855813 100644
--- a/fxjs/cjs_v8.cpp
+++ b/fxjs/cjs_v8.cpp
@@ -196,14 +196,6 @@
   return v8::Local<v8::Array>::Cast(pValue->ToObject(context).ToLocalChecked());
 }
 
-void CJS_V8::SetConstArray(const WideString& name, v8::Local<v8::Array> array) {
-  m_ConstArrays[name] = v8::Global<v8::Array>(GetIsolate(), array);
-}
-
-v8::Local<v8::Array> CJS_V8::GetConstArray(const WideString& name) {
-  return v8::Local<v8::Array>::New(GetIsolate(), m_ConstArrays[name]);
-}
-
 #ifdef PDF_ENABLE_XFA
 CXFA_Object* CJS_V8::ToXFAObject(v8::Local<v8::Value> obj) {
   ASSERT(!obj.IsEmpty());
diff --git a/fxjs/cjs_v8.h b/fxjs/cjs_v8.h
index 1a8d15b..1359309 100644
--- a/fxjs/cjs_v8.h
+++ b/fxjs/cjs_v8.h
@@ -60,9 +60,6 @@
                            unsigned index,
                            v8::Local<v8::Value> pValue);
 
-  void SetConstArray(const WideString& name, v8::Local<v8::Array> array);
-  v8::Local<v8::Array> GetConstArray(const WideString& name);
-
   // Objects.
   std::vector<WideString> GetObjectPropertyNames(v8::Local<v8::Object> pObj);
   v8::Local<v8::Value> GetObjectProperty(v8::Local<v8::Object> pObj,
@@ -73,11 +70,9 @@
 
  protected:
   void SetIsolate(v8::Isolate* pIsolate) { m_isolate = pIsolate; }
-  void ClearConstArray() { m_ConstArrays.clear(); }
 
  private:
   v8::Isolate* m_isolate;
-  std::map<WideString, v8::Global<v8::Array>> m_ConstArrays;
 };
 
 #endif  // FXJS_CJS_V8_H_
diff --git a/fxjs/fxjs_v8.cpp b/fxjs/fxjs_v8.cpp
index c9d227c..f1555b2 100644
--- a/fxjs/fxjs_v8.cpp
+++ b/fxjs/fxjs_v8.cpp
@@ -436,7 +436,7 @@
   if (!pData)
     return;
 
-  ClearConstArray();
+  m_ConstArrays.clear();
 
   int maxID = CFXJS_ObjDefinition::MaxID(GetIsolate());
   for (int i = 0; i < maxID; ++i) {
@@ -561,3 +561,12 @@
   }
   return pData ? pData->m_pPrivate : nullptr;
 }
+
+v8::Local<v8::Array> CFXJS_Engine::GetConstArray(const WideString& name) {
+  return v8::Local<v8::Array>::New(GetIsolate(), m_ConstArrays[name]);
+}
+
+void CFXJS_Engine::SetConstArray(const WideString& name,
+                                 v8::Local<v8::Array> array) {
+  m_ConstArrays[name] = v8::Global<v8::Array>(GetIsolate(), array);
+}
diff --git a/fxjs/fxjs_v8.h b/fxjs/fxjs_v8.h
index 6878bcd..4e6b248 100644
--- a/fxjs/fxjs_v8.h
+++ b/fxjs/fxjs_v8.h
@@ -189,12 +189,16 @@
     return v8::Local<v8::Context>::New(GetIsolate(), m_V8Context);
   }
 
+  v8::Local<v8::Array> GetConstArray(const WideString& name);
+  void SetConstArray(const WideString& name, v8::Local<v8::Array> array);
+
  protected:
   CFXJS_Engine();
 
  private:
   v8::Global<v8::Context> m_V8Context;
   std::vector<v8::Global<v8::Object>*> m_StaticObjects;
+  std::map<WideString, v8::Global<v8::Array>> m_ConstArrays;
 };
 
 #endif  // FXJS_FXJS_V8_H_
