做swf网站怎么在公司网站做超链接
2026/5/21 13:08:43 网站建设 项目流程
做swf网站,怎么在公司网站做超链接,水仙直播,创意设计文案对象包装器#xff08;Object Wrap#xff09;Napi::ObjectWrapT 类继承自 Napi::InstanceWrapT 类。Napi::ObjectWrapT 类用于将 C 代码的生命周期绑定到 JavaScript 对象上。绑定完成后#xff0c;每当创建一个 JavaScript 对象实例时#xff0c…对象包装器Object WrapNapi::ObjectWrapT类继承自Napi::InstanceWrapT类。Napi::ObjectWrapT类用于将 C 代码的生命周期绑定到 JavaScript 对象上。绑定完成后每当创建一个 JavaScript 对象实例时对应的 C 类实例也会被创建当调用 JavaScript 对象上定义为InstanceMethod的方法时被包装的 C 类中对应的 C 方法会被触发执行。要实现包装器必须继承Napi::ObjectWrapT类 —— 该类包含了将 JavaScript 代码与 C 对象连接起来的所有底层逻辑。继承Napi::ObjectWrap的类可在 JavaScript 中通过new运算符实例化其方法也可直接从 JavaScript 中调用。「包装wrap」一词指的是将类的方法和状态整合在一起的方式因为你需要编写自定义代码来桥接 C 类的每个方法。⚠️ 注意当 JavaScript 对象被垃圾回收时C 析构函数的调用可能会延迟到后续某个时间点。在此期间Value()方法会返回空值。示例#include napi.h class Example : public Napi::ObjectWrapExample { public: static Napi::Object Init(Napi::Env env, Napi::Object exports); Example(const Napi::CallbackInfo info); static Napi::Value CreateNewItem(const Napi::CallbackInfo info); private: double _value; Napi::Value GetValue(const Napi::CallbackInfo info); Napi::Value SetValue(const Napi::CallbackInfo info); }; Napi::Object Example::Init(Napi::Env env, Napi::Object exports) { // 该方法用于关联访问器和方法的回调函数 Napi::Function func DefineClass(env, Example, { InstanceMethodExample::GetValue(GetValue, static_castnapi_property_attributes(napi_writable | napi_configurable)), InstanceMethodExample::SetValue(SetValue, static_castnapi_property_attributes(napi_writable | napi_configurable)), StaticMethodExample::CreateNewItem(CreateNewItem, static_castnapi_property_attributes(napi_writable | napi_configurable)), }); Napi::FunctionReference* constructor new Napi::FunctionReference(); // 为类构造函数创建持久引用。这能区分 // 调用类原型上的函数和调用类实例上的函数这两种场景。 *constructor Napi::Persistent(func); exports.Set(Example, func); // 将构造函数存储为插件实例数据。这能让该插件 // 支持在多个工作线程上运行多个实例也支持在同一线程的不同上下文 // 中运行多个实例。 // // 默认情况下此处设置在环境中的值会在插件卸载时通过 delete 运算符销毁 // 但也可以自定义销毁器deleter。 env.SetInstanceDataNapi::FunctionReference(constructor); return exports; } Example::Example(const Napi::CallbackInfo info) : Napi::ObjectWrapExample(info) { Napi::Env env info.Env(); // ... Napi::Number value info[0].AsNapi::Number(); this-_value value.DoubleValue(); } Napi::Value Example::GetValue(const Napi::CallbackInfo info){ Napi::Env env info.Env(); return Napi::Number::New(env, this-_value); } Napi::Value Example::SetValue(const Napi::CallbackInfo info){ Napi::Env env info.Env(); // ... Napi::Number value info[0].AsNapi::Number(); this-_value value.DoubleValue(); return this-GetValue(info); } // 初始化原生插件 Napi::Object Init (Napi::Env env, Napi::Object exports) { Example::Init(env, exports); return exports; } // 使用 Init 阶段存储的构造函数创建新实例 Napi::Value Example::CreateNewItem(const Napi::CallbackInfo info) { // 获取在 Init() 阶段存储的实例数据。我们仅在其中存储了构造函数 // 因此此处取出它用于创建该构造函数对应的 JS 类的新实例。 Napi::FunctionReference* constructor info.Env().GetInstanceDataNapi::FunctionReference(); return constructor-New({ Napi::Number::New(info.Env(), 42) }); } // 注册并初始化原生插件 NODE_API_MODULE(NODE_GYP_MODULE_NAME, Init)上述代码可在 JavaScript 中按如下方式使用use strict const { Example } require(bindings)(addon) const example new Example(11) console.log(example.GetValue()) // 输出 11 example.SetValue(19) console.log(example.GetValue()); // 输出 19初始化阶段必须调用Napi::ObjectWrap::DefineClass()方法来关联访问器和方法的回调函数。该方法接收一组属性描述符这些描述符可通过基类的各类静态方法构造。当 JavaScript 代码调用构造函数时构造函数回调会创建一个新的 C 实例并将其「包装」到新创建的 JavaScript 对象中。当 JavaScript 代码调用类上的方法或属性访问器时对应的 C 回调函数会被执行。对于包装对象可能难以区分「调用类原型上的函数」和「调用类实例上的函数」这两种场景。因此最佳实践是保存类构造函数的持久引用 —— 通过检查this对象与类构造函数的关系可区分这两种场景。方法构造函数Constructor创建一个包装了原生实例的 JavaScript 对象新实例。Napi::ObjectWrap(const Napi::CallbackInfo callbackInfo);[in] callbackInfo表示当前 JavaScript 请求各组成部分的对象。Unwrap提取被包装在 JavaScript 对象中的原生实例。static T* Napi::ObjectWrap::Unwrap(Napi::Object wrapper);[in] wrapper包装了原生实例的 JavaScript 对象。返回被包装在 JavaScript 对象中的原生实例。传入Napi::Object后该方法能获取被包装的 C 对象指针进而访问该类内的字段、调用方法等。多数场景下无需调用Unwrap—— 在继承ObjectWrap的类的方法中可直接使用this指针访问包装对象。DefineClass定义一个包含构造函数、静态属性、实例属性、静态方法、实例方法的 JavaScript 类。static Napi::Function Napi::ObjectWrap::DefineClass(Napi::Env env, const char* utf8name, const std::initializer_listPropertyDescriptor properties, void* data nullptr);[in] env用于构造 JavaScript 类的运行环境。[in] utf8name以空字符结尾的字符串表示 JavaScript 构造函数的名称。[in] properties用于描述类的静态 / 实例属性和方法的属性描述符初始化列表详见类属性与描述符。[in] data用户提供的数据会作为Napi::CallbackInfo的data属性传入构造函数回调。返回表示该类构造函数的Napi::Function对象。DefineClass定义一个包含构造函数、静态属性、实例属性、静态方法、实例方法的 JavaScript 类。static Napi::Function Napi::ObjectWrap::DefineClass(Napi::Env env, const char* utf8name, const std::vectorPropertyDescriptor properties, void* data nullptr);[in] env用于构造 JavaScript 类的运行环境。[in] utf8name以空字符结尾的字符串表示 JavaScript 构造函数的名称。[in] properties用于描述类的静态 / 实例属性和方法的属性描述符向量详见类属性与描述符。[in] data用户提供的数据会作为Napi::CallbackInfo的data属性传入构造函数回调。返回表示该类构造函数的Napi::Function对象。OnCalledAsFunction自定义Napi::ObjectWrapT类在 JavaScript 中被当作函数调用未使用new运算符时的行为。该场景下的默认行为是抛出一个Napi::TypeError错误信息为「Class constructors cannot be invoked without new类构造函数必须使用 new 调用」。在派生类中定义该公有方法可覆盖此默认行为。例如你可在内部通过new运算符重新调用 JavaScript 构造函数通过Napi::Function::New(const std::vectornapi_value args)并返回结果对象也可实现完全自定义的逻辑如Date()作为函数调用时返回字符串。static Napi::Value OnCalledAsFunction(const Napi::CallbackInfo callbackInfo);[in] callbackInfo表示当前 JavaScript 请求各组成部分的对象。Finalize提供执行仅依赖基础 Node API 的清理代码的时机如有需要。可重写该方法实现自定义逻辑详见「终结化Finalization」。virtual void Finalize(Napi::BasicEnv env);[in] envNapi::Env运行环境。Finalize提供执行依赖非基础 Node API 的清理代码的时机。可重写该方法实现自定义逻辑。⚠️ 注意定义该方法会导致底层T*数据的销毁操作推迟到垃圾回收周期结束后。由于Napi::Env可访问非基础 Node API其逻辑无法与垃圾回收器在同一个事件循环周期tick中执行。virtual void Finalize(Napi::Env env);[in] envNapi::Env运行环境。StaticMethod创建表示 JavaScript 类静态方法的属性描述符。static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod( const char* utf8name, StaticVoidMethodCallback method, napi_property_attributes attributes napi_default, void* data nullptr);[in] utf8name以空字符结尾的字符串表示类的静态方法名称。[in] method表示 JavaScript 类静态方法的原生函数。[in] attributes与该属性关联的特性可为一个或多个napi_property_attributes枚举值。[in] data调用该方法时传入的用户自定义数据。返回表示 JavaScript 类静态方法的Napi::PropertyDescriptor对象。StaticMethod创建表示 JavaScript 类静态方法的属性描述符。static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod( const char* utf8name, StaticMethodCallback method, napi_property_attributes attributes napi_default, void* data nullptr);[in] utf8name以空字符结尾的字符串表示类的静态方法名称。[in] method表示 JavaScript 类静态方法的原生函数。[in] attributes与该属性关联的特性可为一个或多个napi_property_attributes枚举值。[in] data调用该方法时传入的用户自定义数据。返回表示 JavaScript 类静态方法的Napi::PropertyDescriptor对象。StaticMethod创建表示 JavaScript 类静态方法的属性描述符。static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name, StaticVoidMethodCallback method, napi_property_attributes attributes napi_default, void* data nullptr);[in] name表示类静态方法名称的Napi::Symbol对象。[in] method表示 JavaScript 类静态方法的原生函数。[in] attributes与该属性关联的特性可为一个或多个napi_property_attributes枚举值。[in] data调用该方法时传入的用户自定义数据。返回表示 JavaScript 类静态方法的Napi::PropertyDescriptor对象。StaticMethod创建表示 JavaScript 类静态方法的属性描述符。static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name, StaticMethodCallback method, napi_property_attributes attributes napi_default, void* data nullptr);[in] name表示类静态方法名称的Napi::Symbol对象。[in] method表示 JavaScript 类静态方法的原生函数。[in] attributes与该属性关联的特性可为一个或多个napi_property_attributes枚举值。[in] data调用该方法时传入的用户自定义数据。返回表示 JavaScript 类静态方法的Napi::PropertyDescriptor对象。StaticMethod创建表示 JavaScript 类静态方法的属性描述符。template StaticVoidMethodCallback method static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod( const char* utf8name, napi_property_attributes attributes napi_default, void* data nullptr);[in] method表示 JavaScript 类静态方法的原生函数无返回值。[in] utf8name以空字符结尾的字符串表示类的静态方法名称。[in] attributes与该属性关联的特性可为一个或多个napi_property_attributes枚举值。[in] data调用该方法时传入的用户自定义数据。返回表示 JavaScript 类静态方法的Napi::PropertyDescriptor对象。StaticMethod创建表示 JavaScript 类静态方法的属性描述符。template StaticMethodCallback method static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod( const char* utf8name, napi_property_attributes attributes napi_default, void* data nullptr);[in] method表示 JavaScript 类静态方法的原生函数。[in] utf8name以空字符结尾的字符串表示类的静态方法名称。[in] attributes与该属性关联的特性可为一个或多个napi_property_attributes枚举值。[in] data调用该方法时传入的用户自定义数据。返回表示 JavaScript 类静态方法的Napi::PropertyDescriptor对象。StaticMethod创建表示 JavaScript 类静态方法的属性描述符。template StaticVoidMethodCallback method static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name, napi_property_attributes attributes napi_default, void* data nullptr);[in] method表示 JavaScript 类静态方法的原生函数。[in] name表示类静态方法名称的Napi::Symbol对象。[in] attributes与该属性关联的特性可为一个或多个napi_property_attributes枚举值。[in] data调用该方法时传入的用户自定义数据。返回表示 JavaScript 类静态方法的Napi::PropertyDescriptor对象。StaticMethod创建表示 JavaScript 类静态方法的属性描述符。template StaticMethodCallback method static Napi::PropertyDescriptor Napi::ObjectWrap::StaticMethod(Symbol name, napi_property_attributes attributes napi_default, void* data nullptr);[in] method表示 JavaScript 类静态方法的原生函数。[in] name表示类静态方法名称的Napi::Symbol对象。[in] attributes与该属性关联的特性可为一个或多个napi_property_attributes枚举值。[in] data调用该方法时传入的用户自定义数据。返回表示 JavaScript 类静态方法的Napi::PropertyDescriptor对象。StaticAccessor创建表示 JavaScript 类静态访问器属性的属性描述符。static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor( const char* utf8name, StaticGetterCallback getter, StaticSetterCallback setter, napi_property_attributes attributes napi_default, void* data nullptr);[in] utf8name以空字符结尾的字符串表示类的静态访问器属性名称。[in] getter对 JavaScript 类的该属性执行读取get操作时调用的原生函数。[in] setter对 JavaScript 类的该属性执行写入set操作时调用的原生函数。[in] attributes与该属性关联的特性可为一个或多个napi_property_attributes枚举值。[in] data调用获取器getter或设置器setter时传入的用户自定义数据。返回表示 JavaScript 类静态访问器属性的Napi::PropertyDescriptor对象。StaticAccessor创建表示 JavaScript 类静态访问器属性的属性描述符。static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor(Symbol name, StaticGetterCallback getter, StaticSetterCallback setter, napi_property_attributes attributes napi_default, void* data nullptr);[in] name表示静态访问器名称的Napi::Symbol对象。[in] getter对 JavaScript 类的该属性执行读取get操作时调用的原生函数。[in] setter对 JavaScript 类的该属性执行写入set操作时调用的原生函数。[in] attributes与该属性关联的特性可为一个或多个napi_property_attributes枚举值。[in] data调用获取器getter或设置器setter时传入的用户自定义数据。返回表示 JavaScript 类静态访问器属性的Napi::PropertyDescriptor对象。StaticAccessor创建表示 JavaScript 类静态访问器属性的属性描述符。template StaticGetterCallback getter, StaticSetterCallback setternullptr static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor( const char* utf8name, napi_property_attributes attributes napi_default, void* data nullptr);[in] getter对 JavaScript 类的该属性执行读取get操作时调用的原生函数。[in] setter对 JavaScript 类的该属性执行写入set操作时调用的原生函数默认值为nullptr。[in] utf8name以空字符结尾的字符串表示类的静态访问器属性名称。[in] attributes与该属性关联的特性可为一个或多个napi_property_attributes枚举值。[in] data调用获取器getter或设置器setter时传入的用户自定义数据。返回表示 JavaScript 类静态访问器属性的Napi::PropertyDescriptor对象。StaticAccessor创建表示 JavaScript 类静态访问器属性的属性描述符。template StaticGetterCallback getter, StaticSetterCallback setternullptr static Napi::PropertyDescriptor Napi::ObjectWrap::StaticAccessor(Symbol name, napi_property_attributes attributes napi_default, void* data nullptr);[in] getter对 JavaScript 类的该属性执行读取get操作时调用的原生函数。[in] setter对 JavaScript 类的该属性执行写入set操作时调用的原生函数默认值为nullptr。[in] name表示静态访问器名称的Napi::Symbol对象。[in] attributes与该属性关联的特性可为一个或多个napi_property_attributes枚举值。[in] data调用获取器getter或设置器setter时传入的用户自定义数据。返回表示 JavaScript 类静态访问器属性的Napi::PropertyDescriptor对象。StaticValue创建表示 JavaScript 类静态值属性的属性描述符。static Napi::PropertyDescriptor Napi::ObjectWrap::StaticValue( const char* utf8name, Napi::Value value, napi_property_attributes attributes napi_default);[in] utf8name以空字符结尾的字符串表示静态属性的名称。[in] value读取get该属性时返回的值。[in] attributes除napi_static外与该属性关联的特性可为一个或多个napi_property_attributes枚举值。返回表示 JavaScript 类静态值属性的Napi::PropertyDescriptor对象。StaticValue创建表示 JavaScript 类静态值属性的属性描述符。static Napi::PropertyDescriptor Napi::ObjectWrap::StaticValue(Symbol name, Napi::Value value, napi_property_attributes attributes napi_default);[in] nameNapi::Symbol对象其值用于标识静态属性的名称。[in] value读取get该属性时返回的值。[in] attributes除napi_static外与该属性关联的特性可为一个或多个napi_property_attributes枚举值。返回表示 JavaScript 类静态值属性的Napi::PropertyDescriptor对象。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询