阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Node.js N-API 处理 JavaScript 属性

      Node.js N-API 处理 JavaScript 属性

      N-API exposes a set of APIs to get and set properties on JavaScript objects. Some of these types are documented under

      ECMAScript Language Specification.

      Properties in JavaScript are represented as a tuple of a key and a value. Fundamentally, all property keys in N-API can be represented in one of the following forms:

      Named: a simple UTF8-encoded string Integer-Indexed: an index value represented by uint32_t JavaScript value: these are represented in N-API by napi_value. This can be a napi_value representing a String, Number, or Symbol. N-API values are represented by the type napi_value. Any N-API call that requires a JavaScript value takes in a napi_value. However, it’s the caller’s responsibility to make sure that the napi_value in question is of the JavaScript type expected by the API.

      The APIs documented in this section provide a simple interface to get and set properties on arbitrary JavaScript objects represented by napi_value.

      For instance, consider the following JavaScript code snippet:

      const obj = {}; obj.myProp = 123; The equivalent can be done using N-API values with the following snippet:

      napi_status status = napi_generic_failure;

      // const obj = {} napi_value obj, value; status = napi_create_object(env, &obj); if (status != napi_ok) return status;

      // Create a napi_value for 123 status = napi_create_int32(env, 123, &value); if (status != napi_ok) return status;

      // obj.myProp = 123 status = napi_set_named_property(env, obj, “myProp”, value); if (status != napi_ok) return status; Indexed properties can be set in a similar manner. Consider the following JavaScript snippet:

      const arr = []; arr[123] = ‘hello’; The equivalent can be done using N-API values with the following snippet:

      napi_status status = napi_generic_failure;

      // const arr = []; napi_value arr, value; status = napi_create_array(env, &arr); if (status != napi_ok) return status;

      // Create a napi_value for ‘hello’ status = napi_create_string_utf8(env, “hello”, NAPI_AUTO_LENGTH, &value); if (status != napi_ok) return status;

      // arr[123] = ‘hello’; status = napi_set_element(env, arr, 123, value); if (status != napi_ok) return status; Properties can be retrieved using the APIs described in this section. Consider the following JavaScript snippet:

      const arr = []; const value = arr[123]; The following is the approximate equivalent of the N-API counterpart:

      napi_status status = napi_generic_failure;

      // const arr = [] napi_value arr, value; status = napi_create_array(env, &arr); if (status != napi_ok) return status;

      // const value = arr[123] status = napi_get_element(env, arr, 123, &value); if (status != napi_ok) return status; Finally, multiple properties can also be defined on an object for performance reasons. Consider the following JavaScript:

      const obj = {}; Object.defineProperties(obj, { ‘foo’: { value: 123, writable: true, configurable: true, enumerable: true }, ‘bar’: { value: 456, writable: true, configurable: true, enumerable: true } }); The following is the approximate equivalent of the N-API counterpart:

      napi_status status = napi_status_generic_failure;

      // const obj = {}; napi_value obj; status = napi_create_object(env, &obj); if (status != napi_ok) return status;

      // Create napi_values for 123 and 456 napi_value fooValue, barValue; status = napi_create_int32(env, 123, &fooValue); if (status != napi_ok) return status; status = napi_create_int32(env, 456, &barValue); if (status != napi_ok) return status;

      // Set the properties napi_property_descriptor descriptors[] = { { “foo”, NULL, NULL, NULL, NULL, fooValue, napi_default, NULL }, { “bar”, NULL, NULL, NULL, NULL, barValue, napi_default, NULL } } status = napi_define_properties(env, obj, sizeof(descriptors) / sizeof(descriptors[0]), descriptors); if (status != napi_ok) return status;


      更多内容请参考:Node.js N-API,或者通过 点击对应菜单 进行查看;


      目录
      本文目录
      目录