文档
概念
对象

对象

Object 很容易与 Class 的使用混淆,与 Class 不同,你不能将 functionmethod 分配给 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