### Question:
WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject { @Override public WXDomObject clone() { if (sDestroy.get()) { return null; } if(isCloneThis()){ return this; } WXDomObject dom = null; try { dom = WXDomObjectFactory.newInstance(mType); copyFields(dom); } catch (Exception e) { if (WXEnvironment.isApkDebugable()) { WXLogUtils.e("WXDomObject clone error: ", e); } } return dom; }  void traverseTree(Consumer...consumers); void traverseUpdateTree(Consumer...consumers); int getViewPortWidth(); void setViewPortWidth(int mViewPortWidth); String getRef(); String getType(); @NonNull WXStyle getStyles(); @NonNull WXAttr getAttrs(); @NonNull WXEvent getEvents(); WXTransition getTransition(); @NonNull DomContext getDomContext(); void clearEvents(); static void prepareRoot(WXDomObject domObj,float defaultHeight,float defaultWidth); void parseFromJson(JSONObject map); void layoutBefore(); void layoutAfter(); final boolean hasUpdate(); final void markUpdateSeen(); @Override void setStyleHeight(float height); @Override void setStyleWidth(float width); boolean isFixed(); boolean canRecycled(); Object getExtra(); void remove(WXDomObject child); void removeFromDom(WXDomObject child); int index(WXDomObject child); void add(WXDomObject child, int index); @Deprecated void add2Dom(WXDomObject child, int index); WXDomObject getChild(int index); void addEvent(String e); boolean containsEvent(String e); void removeEvent(String e); void updateAttr(Map<String, Object> updates); void updateStyle(Map<String, Object> styles); void updateStyle(Map<String, Object> updates, boolean byPesudo); void applyStyle(Map<String, Object> styles); int childCount(); void hide(); void show(); boolean isVisible(); @Override WXDomObject clone(); boolean isDestroy(); void destroy(); ArrayList<String> getFixedStyleRefs(); void add2FixedDomList(String ref); String dumpDomTree(); static @Nullable WXDomObject parse(JSONObject json, WXSDKInstance wxsdkInstance); static @Nullable WXDomObject parse(JSONObject json, WXSDKInstance wxsdkInstance, WXDomObject parentDomObject); boolean isCloneThis(); void setCloneThis(boolean cloneThis); static void addDirtyKey(String key); static final String CHILDREN; static final String TYPE; static final String TAG; static final String ROOT; @Deprecated
  static final String TRANSFORM; @Deprecated
  static final String TRANSFORM_ORIGIN; @Deprecated
  public WXDomObject parent; public long mDomThreadNanos; public long mDomThreadTimestamp; }### Answer:
@Test public void testClone() throws Exception { JSONObject.parseObject("{\"ref\":\"100\",\"type\":\"div\",\"attr\":{},\"style\":{\"backgroundColor\":\"rgb(40,96,144)\",\"fontSize\":40,\"color\":\"#ffffff\",\"paddingRight\":30,\"paddingLeft\":30,\"paddingBottom\":20,\"paddingTop\":20}}"); JSONObject obj = new JSONObject(); obj.put("ref","101"); obj.put("type","test"); JSONArray event = new JSONArray(); event.add("click"); obj.put("event",event); dom.parseFromJson(obj); WXDomObject clone = dom.clone(); assertEquals(clone.getRef(),"101"); assertEquals(clone.getType(),"test"); }