web-sys
中的繼承
JS 類別之間的繼承是網頁上 DOM 如何運作的基礎,因此 web-sys
提供對此繼承層次的存取權限非常重要!在使用 web-sys
時,您可以使用幾種方式來存取繼承層次。
使用 Deref
存取父類別
與 Rust 中的智能指標類似,web_sys
中的所有類型都實作了 Deref
以指向其父 JS 類別。例如,如果您有一個 web_sys::Element
,您可以從該元素隱式建立一個 web_sys::Node
#![allow(unused)] 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)] 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
)。
您可以在特性本身找到更多相關文件