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”]