---
title: '对象'
description: 使用 NAPI-RS 在 Rust 和 Node.js 之间传递普通 JavaScript 对象。
---

# 对象

`Object` 很容易与 `Class` 的使用混淆，与 `Class` 不同，你不能将 `function` 或 `method` 分配给 `Object`。

**lib.rs**

```rust
#[napi(object)]
pub struct Pet {
  pub name: String,
  pub kind: u32,
}
```

这个 `struct` 的任何 `impl` 块都不会影响 JavaScript `Object`。

::: warning
如果你想使用 `#[napi(object)]` 属性将 Rust `struct` 转换为 JavaScript
`Object`，你需要将其所有字段标记为 `pub`。

:::

当 `struct` 被标记为 `#[napi(object)]` 时，你可以将其用作函数参数类型或返回类型。

**lib.rs**

```rust
#[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,
  }
}
```

::: warning
传入的 JavaScript Object 或从 Rust 返回的 Object 都是克隆的， 意思是对
JavaScript `Object` 的任何更改都不会影响原始的 Rust `struct`， 对 Rust
`struct` 的任何更改也不会影响 JavaScript `Object`。

:::
