2016-07-31 101 views
0

我試圖用1傳遞參數編寫C函數。該參數必須是一個對象。我想修改這個對象在C代碼是這樣的:如何添加,修改或刪除duktape中的對象的屬性

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

有人可以提供一個小例子,如何做到這一點? 當然,我可以編寫一個C函數返回一個新的對象,然後在原生JavaScript中編寫一個解決方法函數,但是有什麼辦法可以在C裏面做到這一點?

回答

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 */ 
+0

非常感謝你,這是非常有益的,明確的現在! –