【发布时间】:2017-11-03 19:33:27
【问题描述】:
我正在开发一个项目,该项目将使用 JavascriptCore 在本机应用程序中运行 javascript。我能够将 C 本机对象与 JSClassDefinition 类绑定,并设置要导出到 Javascript 的静态函数和值。我现在的问题是我想绑定一个具有其他结构类型属性的结构。有效的代码是这样的:
struct Person {
string name;
string lastName;
int age;
int salary;
int getSalary()
{
return salary;
}
};
.......
JSClassRef PersonClass() {
static JSClassRef person_class;
if (!person_class) {
JSClassDefinition classDefinition = kJSClassDefinitionEmpty;
static JSStaticFunction staticFunctions[] = {
{ "setSalary", set_salary, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ 0, 0, 0 }
};
static JSStaticValue staticValues[] = {
{ "name", person_get_name, 0, kJSPropertyAttributeDontDelete },
{ "lasName", person_get_lastName, 0, kJSPropertyAttributeReadOnly | kJSPropertyAttributeDontDelete },
{ 0, 0, 0, 0 }
};
classDefinition.className = "Person";
classDefinition.attributes = kJSClassAttributeNone;
classDefinition.staticFunctions = staticFunctions;
classDefinition.staticValues = staticValues;
classDefinition.finalize = person_finalize;
classDefinition.callAsConstructor = person_CallAsConstructor;
person_class = JSClassCreate(&classDefinition);
}
return person_class;
}
.......
JSEvaluateScript(globalContext, JSStringCreateWithUTF8CString("function changeSalary(person) { person.setSalary(200); return true;}"), nullptr, nullptr, 1, nullptr)
........
Person *e = new Person();
e->salary = 100;
e->age = 34;
JSValueRef changeSalaryFunc = JSObjectGetProperty(globalContext, globalObject, JSStringCreateWithUTF8CString("changeSalary"),nullptr);
JSObjectRef object = JSValueToObject(globalContext, changeSalaryFunc, nullptr);
JSValueRef exception = 0;
int argumentCount = 1;
JSValueRef arguments[argumentCount];
JSObjectRef ref = JSObjectMake(globalContext, PersonClass(), static_cast<void*>(e));
arguments[0] = ref;
JSValueRef result = JSObjectCallAsFunction(globalContext, object, 0, argumentCount, arguments, &exception);
但我面临的问题是代码应该处理这种结构。
struct Address {
string street;
int number;
};
struct Person {
string name;
string lastName;
int age;
int salary;
Address address;
int getSalary()
{
return salary;
}
};
如何绑定这种结构?因为我想使用这样的代码。
JSEvaluateScript(globalContext, JSStringCreateWithUTF8CString("function address_number(person) { return person.address.number;}"), nullptr, nullptr, 1, nullptr);
感谢阅读。
【问题讨论】:
标签: javascript c javascriptcore