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
bind()
method, which produces a BindOptions
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
.bind(&mut cx)
.arg("42")?
.call()?;
§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()
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
.bind(&mut cx)
.arg("https://neon-bindings.com")?
.construct()?;
§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::bind
.
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::bind
.
Source§impl JsFunction
impl JsFunction
Sourcepub fn bind<'a, 'cx: 'a>(&self, cx: &'a mut Cx<'cx>) -> BindOptions<'a, 'cx>
pub fn bind<'a, 'cx: 'a>(&self, cx: &'a mut Cx<'cx>) -> BindOptions<'a, 'cx>
Create a BindOptions
builder for calling this function.
The builder methods make it convenient to assemble the call from parts:
let x: f64 = parse_int
.bind(&mut cx)
.arg("42")?
.call()?;
Source§impl JsFunction
impl JsFunction
Sourcepub fn call_with<'a, C: Context<'a>>(&self, _cx: &C) -> CallOptions<'a>
👎Deprecating in a future version: use JsFunction::bind
instead
pub fn call_with<'a, C: Context<'a>>(&self, _cx: &C) -> CallOptions<'a>
JsFunction::bind
insteadCreate a CallOptions
for calling this function.
Sourcepub fn construct_with<'a, C: Context<'a>>(
&self,
_cx: &C,
) -> ConstructOptions<'a>
👎Deprecating in a future version: use JsFunction::bind
instead
pub fn construct_with<'a, C: Context<'a>>( &self, _cx: &C, ) -> ConstructOptions<'a>
JsFunction::bind
insteadCreate 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 prop<'a, 'cx: 'a, K: PropertyKey>(
&self,
cx: &'a mut Cx<'cx>,
key: K,
) -> PropOptions<'a, 'cx, Self, K>
fn prop<'a, 'cx: 'a, K: PropertyKey>( &self, cx: &'a mut Cx<'cx>, key: K, ) -> PropOptions<'a, 'cx, Self, K>
PropOptions
for accessing a property. Read moreSource§fn method<'a, 'cx: 'a, K: PropertyKey>(
&self,
cx: &'a mut Cx<'cx>,
key: K,
) -> NeonResult<BindOptions<'a, 'cx>>
fn method<'a, 'cx: 'a, K: PropertyKey>( &self, cx: &'a mut Cx<'cx>, key: K, ) -> NeonResult<BindOptions<'a, 'cx>>
this
to the object. Read moreSource§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>>>
Object::prop()
insteadSource§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>>
Object::prop()
insteadSource§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>>
Object::prop()
insteadSource§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.fn freeze<'a, C: Context<'a>>(&self, cx: &mut C) -> NeonResult<&Self>
fn seal<'a, C: Context<'a>>(&self, cx: &mut C) -> NeonResult<&Self>
Source§fn set<'a, C: Context<'a>, K: PropertyKey, W: Value>(
&self,
cx: &mut C,
key: K,
val: Handle<'_, W>,
) -> NeonResult<bool>
fn set<'a, C: Context<'a>, K: PropertyKey, W: Value>( &self, cx: &mut C, key: K, val: Handle<'_, W>, ) -> NeonResult<bool>
Object::prop()
insteadfn root<'a, C: Context<'a>>(&self, cx: &mut C) -> Root<Self>
Source§fn call_method_with<'a, C, K>(
&self,
cx: &mut C,
method: K,
) -> NeonResult<CallOptions<'a>>where
C: Context<'a>,
K: PropertyKey,
fn call_method_with<'a, C, K>(
&self,
cx: &mut C,
method: K,
) -> NeonResult<CallOptions<'a>>where
C: Context<'a>,
K: PropertyKey,
Object::method()
insteadSource§impl Value for JsFunction
impl Value for JsFunction
Auto Trait Implementations§
impl Freeze for JsFunction
impl RefUnwindSafe for JsFunction
impl !Send for JsFunction
impl !Sync for JsFunction
impl Unpin for JsFunction
impl UnwindSafe for JsFunction
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more