Docs
Concepts
Inject This

Inject This

In class methods, you may want to access the raw Object value of the Class instance.

lib.rs
#[napi]
use napi::bindgen_prelude::*;
use napi_derive::napi;
 
pub struct QueryEngine {}
 
#[napi]
impl QueryEngine {
  #[napi(constructor)]
  pub fn new() -> Result<Self> {
    Ok(Self {})
  }
 
  #[napi]
  pub fn get_ref_count(&self, this: This) -> Result<Option<i32>> {
    this.get::<i32>("refCount")
  }
}
main.mjs
import { QueryEngine } from './index.js'
 
const qe = new QueryEngine()
qe.refCount = 3
console.log(qe.getRefCount()) // 3

In functions, it may be bind with some objects in JavaScript:

lib.rs
use napi::bindgen_prelude::*;
use napi_derive::napi;
 
#[napi(constructor)]
pub struct Width {
  pub value: i32,
}
 
#[napi]
pub fn plus_one(this: This<&Width>) -> i32 {
  this.value + 1
}
main.mjs
import { Width, plusOne } from './index.js'
 
const width = new Width(1)
console.log(plusOne(width)) // 2