对象
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。