我在我的应用中使用JavascriptCore
,但遇到了一些麻烦。我的javascript是这样的结构:
var Restaurant = function()
{
this.street = function()
{
return "One Street 45";
}
this.postal = function()
{
return "90210";
}
}
现在,在Javascript中我创建了一个允许餐厅将自己添加到地图的功能:
addMeToTheMap(Restaurant);
在JSContext
中,这映射到:
self.context[@"addMeToTheMap"] = ^(JSValue *restaurant) {
};
我觉得很困难的是能够调用street
和postal
函数。我试过[[restaurant callWithArguments:nil] @"street"] callWithArguments:nil]
,但那没用。有什么想法吗?
答案 0 :(得分:0)
<强>为什么强>
考虑一下[[restaurant callWithArguments:nil] @"street"] callWithArguments:nil]
中你在逻辑上说的话。
您在JavaScript中的餐厅功能中没有return语句。因此[restaurant callWithArguments:nil]
将返回无效。
同样street
和postal
都返回字符串。不是this
,因此[[... @"street"] callWithArguments:nil]
正在尝试将字符串作为函数调用。更不用说由于[... @"some string"]
而无法编译。
您真正想要的是什么
您要做的是使用objectForKeyedSubscript:
上的JSValue
方法返回JSValue
。所以不要使用callWithArgs
。你应该做点什么:
[restaurant[@"street" <or> @"postal"] callWithArguments:nil]
将返回包裹在JSValue
中的字符串。您可以使用toString
解包。