getter
和 setter
這兩個屬性可以與 method
結合使用,以指示這是一個 getter 或 setter 方法。預設情況下,帶有 getter
標記的函式會存取與 getter 函式同名的 JavaScript 屬性。帶有 setter
標記的函式名稱目前必須以 set_
開頭,它存取的屬性是 set\_
後的後綴。
考慮以下具有 white_russians
屬性的 getter 和 setter 的 JavaScript 類別
class TheDude {
get white_russians() {
...
}
set white_russians(val) {
...
}
}
我們可以使用以下 #[wasm_bindgen]
屬性導入它
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen] extern "C" { type TheDude; #[wasm_bindgen(method, getter)] fn white_russians(this: &TheDude) -> u32; #[wasm_bindgen(method, setter)] fn set_white_russians(this: &TheDude, val: u32); } #}
在這裡,我們導入 TheDude
類型,並定義存取每個物件的 white_russians
屬性的能力。這裡的第一個函式是 getter,在 Rust 中將以 the_dude.white_russians()
的形式使用,後者是 setter,可以以 the_dude.set_white_russians(2)
的形式使用。請注意,這兩個函式都有一個 this
參數,因為它們都標記了 method
。
最後,您還可以將參數傳遞給 getter
和 setter
屬性,以配置要存取的屬性。當明確指定屬性時,方法名稱沒有限制。例如,以下與上述內容等效
# #![allow(unused_variables)] #fn main() { #[wasm_bindgen] extern "C" { type TheDude; #[wasm_bindgen(method, getter = white_russians)] fn my_custom_getter_name(this: &TheDude) -> u32; #[wasm_bindgen(method, setter = white_russians)] fn my_custom_setter_name(this: &TheDude, val: u32); } #}
注意!getter
和 setter
函式在載入時會在建構函式的原型鏈上找到,快取,然後在每次存取時調用快取的存取器。如果您需要在每次存取時動態遍歷原型鏈,請新增 structural
屬性!
// This is the default function Rust will invoke on `the_dude.white_russians()`:
const white_russians = Object.getOwnPropertyDescriptor(
TheDude.prototype,
"white_russians"
).get;
// This is what you get by adding `structural`:
const white_russians = function(the_dude) {
return the_dude.white_russians;
};