class Function
Function 类可以将在 C++ 中创建的函数对象暴露给 JavaScript,从而在 JavaScript 中执行。
通过该类创建的函数并不会自动暴露给 JavaScript,还是需要通过 exports 对象导出。
对于来自非 JavaScript 线程、需要使用同步事件循环调用的回调函数,请使用 ThreadSafeFunction 类。
Function 对象绑定的函数按照有无返回值可以分为两类:
using VoidCallback = void (*)(const CallbackInfo& info);
using Callback = Value (*)(const CallbackInfo& info);
New
template <VoidCallback cb> static Function::New(env, utf8name, data);
template <Callback cb> static Function::New(env, utf8name, data);
template <typename Callable> static Function::New(env, Callable cb, utf8name, data);
//...
Call & MakeCallback
Function 类还可以用来执行从 JavaScript 中传递过来的函数。
Function 有两个实例方法可以做这个事情:Call
& MakeCallback
。
Call 用于执行存在于 JavaScript 调用栈中的函数,MakeCallback 用于调用不存在于 JavaScript 调用栈中的函数。
Value Function::Call(const std::initializer_list<napi_value>& args) const;
Value Function::Call(const std::vector<napi_value>& args) const;
Value Function::Call(size_t argc, const napi_value* args) const;
Value Function::Call(napi_value recv, const std::initializer_list<napi_value>& args) const;
Value Function::Call(napi_value recv, const std::vector<napi_value>& args) const;
Value Function::Call(napi_value recv, size_t argc, const napi_value* args) const;
Value Function::MakeCallback(napi_value recv, const std::initializer_list<napi_value>& args, napi_async_context context = nullptr) const;
Value Function::MakeCallback(napi_value recv, const std::vector<napi_value>& args, napi_async_context context = nullptr) const;
Value Function::MakeCallback(napi_value recv, size_t argc, const napi_value* args, napi_async_context context = nullptr) const;
class FunctionReference
FunctionReference ;类继承自 Reference 类,等价于Reference<Function>
。
每个 FunctionReference 实例持有 Function 对象的引用,并维护其引用计数。
FunctionReference Weak(const Function& f)
弱引用,引用计数被设置为 0FunctionReference Persistent(const Function& f)
持久引用,即强引用,引用计数被设置为 1
因为 FunctionReference 实例直接与 Function 实例绑定,所以也可以在 FunctionReference 实例上调用Call
或者MakeCallback
方法来调用函数。
评论区