0

我正在尝试编写一个带有 1 个传递参数的 C 函数。这个参数必须是一个对象。我想在 C 代码中修改这个对象,如下所示:

var modifyObject = function (obj) {
   obj.new_param = 123;
   obj.existing_param2 = 456;;
   delete obj.existing_param3;
}

有人可以提供一个小例子,如何做到这一点?当然,我可以编写一个返回新对象的 C 函数,然后在本机 JavaScript 中编写一个变通函数,但是在 C 内部有什么方法可以做到这一点?

4

1 回答 1

0

您可以使用Duktape 属性 API 调用来执行此操作,例如如下:

duk_ret_t modify_object(duk_context *ctx) {
    /* argument object is at index 0 */
    duk_push_uint(ctx, 123);                   /* -> stack: [ obj 123 ] */
    duk_put_prop_string(ctx, 0, "new_param");  /* -> stack: [ obj ] */
    duk_push_uint(ctx, 456);
    duk_put_prop_string(ctx, 0, "existing_param2");
    del_prop_string(ctx, 0, "existing_param3");
    return 0;  /* no return value (same as 'return undefined' in Ecmascript) */
}

该函数将被注册为具有单个参数:对象,它将出现在值堆栈索引 0 处:

duk_push_c_function(ctx, modify_object, 1 /*nargs*/);
duk_put_global_string(ctx, "modifyObject");  /* register global binding */
于 2016-08-01T00:19:58.900 回答