DocsCompat modeConceptsWrap native object

Wrap native object

Wraps a native instance in a JavaScript object. The native instance can be retrieved later using Env::unwrap.

struct Native {
  value: i32,
}
 
#[js_function(1)]
fn attach_native_object(ctx: CallContext) -> Result<JsUndefined> {
  let count: i32 = ctx.get::<JsNumber>(0)?.try_into()?;
  let mut this: JsObject = ctx.this_unchecked();
  ctx
    .env
    .wrap(&mut this, Native { value: count + 100 })?;
  ctx.env.get_undefined()
}
 
#[js_function(1)]
fn get_native_object(ctx: CallContext) -> Result<JsNumber> {
  let count: i32 = ctx.get::<JsNumber>(0)?.try_into()?;
  let mut this: JsObject = ctx.this_unchecked();
  let native: Native = ctx
    .env
    .unwrap(&mut this)?;
  ctx.env.create_int32(native.value + 1)
}
const obj = {
  attach: attachNativeObject,
  get: getNativeObject,
}
 
obj.attach(100)
obj.get() // 101