Let’s say, for the sake of example, that you have a JavaScript function that expects the following syntax:

jsFuncWithObjectParam({requiredParam1:42, requiredParam2:"String", optionalParam1:null});

In C++ you can do the following:

namespace client
{
struct ParamObject
{
    void set_requiredParam1(int);
    void set_requiredParam2(const client::String&);
    void set_optionalParam1(client::Object*);
};

void jsFuncWithObjectParam(ParamObject*);
};

void webMain()
{
    client::ParamObject* p = new client::ParamObject();
    p->set_requiredParam1(42);
    p->set_requiredParam2("String");
    //p->set_optionalParam1(nullptr);
    client::jsFuncWithObjectParam(p);
}

We recommend this solution since it’s more type safe. You can also use the shorter code example:

client::Object* p = new client::Object();
p->set_("requiredParam1",new client::Number(42));
p->set_("requiredParam2",new client::String("String"));
p->set_("optionalParam1",nullptr);