【问题标题】:How to check if a JSValue is a function如何检查 JSValue 是否为函数
【发布时间】:2017-04-15 11:54:48
【问题描述】:

我正在使用 JavaScriptCore 与 Objective-C 代码进行交互

JSValue 中没有 isFunction 方法,但是我想检查一个 JSValue 是否是一个 JS Function 并从 Objective-C 中调用它

【问题讨论】:

    标签: objective-c javascriptcore


    【解决方案1】:

    我最终注入了一个小的 javascript 代码来返回 typeof 的结果

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

    【讨论】:

      【解决方案2】:

      看起来没有办法检查。你只能检查你的函数是一个对象(在 JS 中函数是对象)。

      根据文档,如果值不能被视为 JavaScript 函数,-[JSValue callWithArguments:] 将返回 nil。如果 JS 函数没有显式返回值,那么它会隐式返回 JavaScript 值 undefined。所以,看起来你可以简单地尝试调用 JS 函数并在它返回 nil 时处理它。

      【讨论】:

        【解决方案3】:

        不创建任何全局对象的单线:

        // evaluates to true if value is a function, false otherwise
        [[value.context evaluateScript:@"(obj) => typeof obj === 'function'"] callWithArguments:@[value]].toBool
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-03
          • 1970-01-01
          • 1970-01-01
          • 2014-02-18
          相关资源
          最近更新 更多