如何在JavascriptCore中调用子函数?

时间:2017-04-07 17:05:38

标签: ios objective-c javascriptcore

我在我的应用中使用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) {
};

我觉得很困难的是能够调用streetpostal函数。我试过[[restaurant callWithArguments:nil] @"street"] callWithArguments:nil],但那没用。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

<强>为什么

考虑一下[[restaurant callWithArguments:nil] @"street"] callWithArguments:nil]中你在逻辑上说的话。

您在JavaScript中的餐厅功能中没有return语句。因此[restaurant callWithArguments:nil]将返回无效。

同样streetpostal都返回字符串。不是this,因此[[... @"street"] callWithArguments:nil]正在尝试将字符串作为函数调用。更不用说由于[... @"some string"]而无法编译。

您真正想要的是什么

您要做的是使用objectForKeyedSubscript:上的JSValue方法返回JSValue。所以不要使用callWithArgs。你应该做点什么:

[restaurant[@"street" <or> @"postal"] callWithArguments:nil]

将返回包裹在JSValue中的字符串。您可以使用toString解包。