如何在duktape中添加,修改或删除对象的属性

时间:2016-07-31 17:14:54

标签: javascript duktape

我试图用1个传递参数编写C函数。该参数必须是一个对象。我想在C代码中修改此对象,如下所示:

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

有人可以提供一个小例子,怎么做? 当然我可以写一个C函数返回一个新对象,然后在本机JavaScript中编写一个变通办法函数,但有没有办法在C里面做这个?

1 个答案:

答案 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 */