2016-07-31 14 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を使用してください。次のように値スタックインデックス0に表示されますオブジェクト、::

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) */ 
} 

を関数は単一の引数を持つように登録されるだろう

duk_push_c_function(ctx, modify_object, 1 /*nargs*/); 
duk_put_global_string(ctx, "modifyObject"); /* register global binding */ 
+0

ありがとうございました、それは非常に有用かつ明確でした今すぐ! –

関連する問題