Struct neon::types::JsFunction
source · pub struct JsFunction { /* private fields */ }
Expand description
The type of JavaScript
Function
objects.
A JsFunction
may come from an existing JavaScript function, for example
by extracting it from the property of another object such as the
global object, or it may be defined in Rust
with JsFunction::new()
.
§Calling functions
Neon provides a convenient syntax for calling JavaScript functions with the
call_with()
method, which produces a CallOptions
struct that can be used to provide the function arguments (and optionally, the binding for
this
) before calling the function:
// Extract the parseInt function from the global object
let parse_int: Handle<JsFunction> = cx.global("parseInt")?;
// Call parseInt("42")
let x: Handle<JsNumber> = parse_int
.call_with(&mut cx)
.arg(cx.string("42"))
.apply(&mut cx)?;
§Calling functions as constructors
A JsFunction
can be called as a constructor (like new Array(16)
or
new URL("https://neon-bindings.com")
) with the
construct_with()
method:
// Extract the URL constructor from the global object
let url: Handle<JsFunction> = cx.global("URL")?;
// Call new URL("https://neon-bindings.com")
let obj = url
.construct_with(&cx)
.arg(cx.string("https://neon-bindings.com"))
.apply(&mut cx)?;
§Defining functions
JavaScript functions can be defined in Rust with the
JsFunction::new()
constructor, which takes
a Rust implementation function and produces a JavaScript function.
// A function implementation that adds 1 to its first argument
fn add1(mut cx: FunctionContext) -> JsResult<JsNumber> {
let x: Handle<JsNumber> = cx.argument(0)?;
let v = x.value(&mut cx);
Ok(cx.number(v + 1.0))
}
// Define a new JsFunction implemented with the add1 function
let f = JsFunction::new(&mut cx, add1)?;
Implementations§
source§impl JsFunction
impl JsFunction
sourcepub fn new<'a, C, F, V>(cx: &mut C, f: F) -> JsResult<'a, JsFunction>
pub fn new<'a, C, F, V>(cx: &mut C, f: F) -> JsResult<'a, JsFunction>
Returns a new JsFunction
implemented by f
.
source§impl JsFunction
impl JsFunction
sourcepub fn call<'a, 'b, C: Context<'a>, T, AS>(
&self,
cx: &mut C,
this: Handle<'b, T>,
args: AS
) -> JsResult<'a, JsValue>
pub fn call<'a, 'b, C: Context<'a>, T, AS>( &self, cx: &mut C, this: Handle<'b, T>, args: AS ) -> JsResult<'a, JsValue>
Calls this function.
See also: JsFunction::call_with
.
sourcepub fn exec<'a, 'b, C: Context<'a>, T, AS>(
&self,
cx: &mut C,
this: Handle<'b, T>,
args: AS
) -> NeonResult<()>
pub fn exec<'a, 'b, C: Context<'a>, T, AS>( &self, cx: &mut C, this: Handle<'b, T>, args: AS ) -> NeonResult<()>
Calls this function for side effect, discarding its result.
See also: JsFunction::call_with
.
source§impl JsFunction
impl JsFunction
sourcepub fn call_with<'a, C: Context<'a>>(&self, _cx: &C) -> CallOptions<'a>
pub fn call_with<'a, C: Context<'a>>(&self, _cx: &C) -> CallOptions<'a>
Create a CallOptions
for calling this function.
sourcepub fn construct_with<'a, C: Context<'a>>(
&self,
_cx: &C
) -> ConstructOptions<'a>
pub fn construct_with<'a, C: Context<'a>>( &self, _cx: &C ) -> ConstructOptions<'a>
Create a ConstructOptions
for calling this function
as a constructor.
Trait Implementations§
source§impl Debug for JsFunction
impl Debug for JsFunction
source§impl Object for JsFunction
impl Object for JsFunction
source§fn get_opt<'a, V: Value, C: Context<'a>, K: PropertyKey>(
&self,
cx: &mut C,
key: K
) -> NeonResult<Option<Handle<'a, V>>>
fn get_opt<'a, V: Value, C: Context<'a>, K: PropertyKey>( &self, cx: &mut C, key: K ) -> NeonResult<Option<Handle<'a, V>>>
undefined
and
attempts to downcast the value if it existed.source§fn get_value<'a, C: Context<'a>, K: PropertyKey>(
&self,
cx: &mut C,
key: K
) -> NeonResult<Handle<'a, JsValue>>
fn get_value<'a, C: Context<'a>, K: PropertyKey>( &self, cx: &mut C, key: K ) -> NeonResult<Handle<'a, JsValue>>
source§fn get<'a, V: Value, C: Context<'a>, K: PropertyKey>(
&self,
cx: &mut C,
key: K
) -> NeonResult<Handle<'a, V>>
fn get<'a, V: Value, C: Context<'a>, K: PropertyKey>( &self, cx: &mut C, key: K ) -> NeonResult<Handle<'a, V>>
obj.get_value(&mut cx)?.downcast_or_throw(&mut cx)
. Read moresource§fn get_own_property_names<'a, C: Context<'a>>(
&self,
cx: &mut C
) -> JsResult<'a, JsArray>
fn get_own_property_names<'a, C: Context<'a>>( &self, cx: &mut C ) -> JsResult<'a, JsArray>
napi-6
only.