Ios 如何在JavascriptCore中调用子函数?
我正在我的应用程序中使用Ios 如何在JavascriptCore中调用子函数?,ios,objective-c,javascriptcore,Ios,Objective C,Javascriptcore,我正在我的应用程序中使用JavascriptCore,但遇到了一些问题。我的javascript结构如下: var Restaurant = function() { this.street = function() { return "One Street 45"; } this.postal = function() { return "90210"; } } 现在,我用Javascript创建了一个函数,允
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]
,但没有成功。有什么想法吗?为什么
想想你在[[restaurant callWithArguments:nil]@“street”]callWithArguments:nil]中逻辑上说的话
在JavaScript中,餐厅函数中没有return语句。因此,[restaurant callWithArguments:nil]
将返回void
还有街道
和邮政
两个返回字符串。不是此
,因此[[…@“street”]callWithArguments:nil]
正在尝试将字符串作为函数调用。更不用说它甚至不应该编译,因为[…@“some string”]
你真正想要的
您要做的是在JSValue
上使用objectforkeydsubscript:
方法,该方法返回JSValue
。因此,不要使用callWithArgs
。你应该这样做:
[restaurant[@"street" <or> @"postal"] callWithArguments:nil]
[餐厅[@“街道”@“邮政”]呼叫带参数:无]
它将返回包装在JSValue
中的字符串。您可以使用toString
打开它,您如何创建对餐厅的引用。javascript中的Restaurant
变量可以有任何名称。对,我的意思是你在做什么:JSValue*Restaurant=self.context[@“Restaurant”]
?我从addMeToTheMap()
函数获取值,那么是否需要这样做?如果这样做,它将返回(null)
。这就是我把它改成的:self.context[@“addMeToTheMap”]=^(JSValue*restaurant){NSLog(@“street:%@),[restaurant[@“street”]callWithArguments:nil])
您可以登录餐厅
和餐厅[@“street”]
?