Как проверить, является ли JSValue функцией

Я использую JavaScriptCore для взаимодействия с кодом Objective-C.

В JSValue нет метода isFunction, но я хочу проверить, является ли JSValue функцией JS, и вызвать ее из Objective-C.


person kaala    schedule 15.04.2017    source источник


Ответы (2)


В итоге я ввел небольшой код javascript, чтобы вернуть результат typeof

[context evaluateScript:@"function is(obj){ return typeof obj }"];
JSValue *is = [[context globalObject] valueForProperty:@"is"];
JSValue *type = [is callWithArguments:@[ is ]];
person kaala    schedule 26.04.2017

Похоже, это никак не проверить. Вы можете только проверить, что ваша функция является объектом (а в JS функции являются объектами).

Согласно документации, -[JSValue callWithArguments:] возвращает nil, если значение нельзя рассматривать как функцию JavaScript. Если функция JS не возвращает значение явно, она неявно возвращает значение JavaScript undefined. Итак, похоже, вы можете просто попытаться вызвать функцию JS и обработать случай, если она вернет nil.

person Borys Verebskyi    schedule 18.04.2017