如何在 Wasm (Rust) 中访问 JS 对象属性?



我正在使用wasm bindgen,我有以下功能:

#[wasm_bindgen]
pub fn obj(o: &JsValue){
console::log_1(o);
}

在js中,我将这个函数称为obj({name: "john"});它工作正常,但是当我尝试console::log_1(o.name);unknown field指向name时给出错误

JsValue

没有字段name。要获取此字段,您必须声明 JS 对象。

变式 1

将 serde 添加到依赖项:

serde = "^1.0.101"
serde_derive = "^1.0.101"

锈代码:

extern crate serde;
#[derive(Serialize, Deserialize)]
pub struct User {
pub name: String,
}
#[wasm_bindgen]
pub fn obj(o: &JsValue){
let user: User = o.into_serde().unwrap();
console::log_1(user.name);
}

变式2

另一种方法是直接使用 wasm-bindgen,但我从未使用过它。我认为它应该像这样工作:

#[wasm_bindgen]
pub struct User {
pub name: String,
}
#[wasm_bindgen]
pub fn obj(o: User){
console::log_1(o.name);
}

还有第三个变体:使用js_sys::Reflect::get

在您的情况下,它看起来像这样:

let value = js_sys::Reflect::get(o, &"name".into())?;
console::log_1(value);

请查看访问非类型化 JavaScript 值属性的wasm_bindgen文档。

相关内容

  • 没有找到相关文章

最新更新