web-sys
中的繼承
JS 類別之間的繼承是網頁上 DOM 如何運作的基礎,因此 web-sys
提供對此繼承層次的存取權非常重要!當使用 web-sys
時,您有幾種方法可以存取繼承層次。
使用 Deref
存取父類別
與 Rust 中的智慧指標類似,web_sys
中的所有類型都實作了 Deref
到其父 JS 類別。這表示,舉例來說,如果您有一個 web_sys::Element
,您可以從它隱式建立一個 web_sys::Node
# #![allow(unused_variables)] #fn main() { let element: &Element = ...; element.append_child(..); // call a method on `Node` method_expecting_a_node(&element); // coerce to `&Node` implicitly let node: &Node = &element; // explicitly coerce to `&Node` #}
使用 Deref
可以讓您符合人體工學地向上過渡到父類別及其以上,讓您可以使用 .
運算符存取所有方法。
使用 AsRef
存取父類別
除了 Deref
之外,AsRef
特徵也針對 web_sys
中的所有類型在繼承層次中的所有類型實作。例如,對於 HtmlAnchorElement
類型,您會發現
# #![allow(unused_variables)] #fn main() { impl AsRef<HtmlElement> for HtmlAnchorElement impl AsRef<Element> for HtmlAnchorElement impl AsRef<Node> for HtmlAnchorElement impl AsRef<EventTarget> for HtmlAnchorElement impl AsRef<Object> for HtmlAnchorElement impl AsRef<JsValue> for HtmlAnchorElement #}
您可以使用 .as_ref()
從 web_sys
中的類型明確取得任何父類別的參考。請注意,由於 AsRef
實作的數量,您可能還需要類型推斷指導。
使用 JsCast
存取子類別
最後,wasm_bindgen::JsCast
特徵可用於實作類型之間的所有類型的轉換。它支援類型之間的靜態未檢查轉換,以及類型之間的動態執行階段檢查轉換(使用 instanceof
)。
有關此內容的更多文件可以在特徵本身中找到