对象
Object
很容易与 Class
的使用混淆,与 Class
不同,你不能将 function
或 method
分配给 Object
。
lib.rs
#[napi(object)]
pub struct Pet {
pub name: String,
pub kind: u32,
}
这个 struct
的任何 impl
块都不会影响 JavaScript Object
。
⚠️
如果你想使用 #[napi(object)]
属性将 Rust struct
转换为 JavaScript
Object
,你需要将其所有字段标记为 pub
。
当 struct
被标记为 #[napi(object)]
时,你可以将其用作函数参数类型或返回类型。
lib.rs
#[napi(object)]
pub struct Pet {
pub name: String,
pub kind: u32,
}
#[napi]
fn print_pet(pet: Pet) {
println!("{}", pet.name);
}
#[napi]
fn create_cat() -> Pet {
Pet {
name: "cat".to_string(),
kind: 1,
}
}
⚠️
传入的 JavaScript Object 或从 Rust 返回的 Object 都是克隆的, 意思是对
JavaScript Object
的任何更改都不会影响原始的 Rust struct
, 对 Rust
struct
的任何更改也不会影响 JavaScript Object
。