我试图用1个传递参数编写C函数。该参数必须是一个对象。我想在C代码中修改此对象,如下所示:
var modifyObject = function (obj) {
obj.new_param = 123;
obj.existing_param2 = 456;;
delete obj.existing_param3;
}
有人可以提供一个小例子,怎么做? 当然我可以写一个C函数返回一个新对象,然后在本机JavaScript中编写一个变通办法函数,但有没有办法在C里面做这个?
答案 0 :(得分:0)
您可以使用Duktape property API calls执行此操作,例如如下:
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 */