2017-04-07 5 views
0

私のアプリでJavascriptCoreを使用していますが、いくつかの問題があります。 JavaScriptで私はレストランがマップに自分自身を追加することが可能になります機能作成した、今JavascriptCoreでsubfunctionを呼び出す方法は?

var Restaurant = function() 
{ 
    this.street = function() 
    { 
     return "One Street 45"; 
    } 

    this.postal = function() 
    { 
     return "90210"; 
    } 
} 

addMeToTheMap(Restaurant); 

をそしてJSContextで、これはにマップ:私のjavascriptのは、このような構造であり

self.context[@"addMeToTheMap"] = ^(JSValue *restaurant) { 
}; 

streetpostalの機能を呼び出すことは難しいと思いますが、私は[[restaurant callWithArguments:nil] @"street"] callWithArguments:nil]をやってみたが、うまくいかなかった。何か案は?

+0

「レストラン」への参照をどのように作成していますか? – Oxcug

+0

私はそうではありません。 javascriptの 'Restaurant'変数には任意の名前を付けることができます。 – user4992124

+0

私は、あなたがやっていることを意味しています: 'JSValue * restaurant = self.context [@" Restaurant "]'? – Oxcug

答えて

0

なぜ

あなたは論理的に[[restaurant callWithArguments:nil] @"street"] callWithArguments:nil]に言っているかについて考えてみてください。

JavaScriptのレストラン機能にreturn文がありません。したがって[restaurant callWithArguments:nil]はvoidを返します。

streetおよびpostal両方がリターン文字列です。そうでないとthis、したがって[[... @"street"] callWithArguments:nil]が文字列を関数として呼び出そうとしています。これは[... @"some string"]のためにコンパイルすべきではありません。あなたが実際にあなたが何をしたいのか

JSValueを返しJSValueobjectForKeyedSubscript:メソッドを使用している欲しい

。代わりにcallWithArgsを使用する代わりに。 JSValueに包まれたあなたの文字列を返します

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

:あなたのような何かをする必要があります。 toStringを使用してアンラップすることができます。

+0

そうすれば '(null)'を返します。これは私がそれを変更したものです: 'self.context [@" addMeToTheMap "] = ^(JSValue *レストラン){ NSLog(@" street:%@ "、[レストラン[@" street "] callWithArguments:nil]) ; }; ' – user4992124

+0

あなたは' restaurant'と 'restaurant [@" street "]'にログできますか? – Oxcug

関連する問題