invoke method

  1. @override
dynamic invoke(
  1. String? objectName,
  2. String methodName,
  3. List args
)
override

在全局对象上调用方法 (由具体实现决定如何处理)

Implementation

@override
dynamic invoke(String? objectName, String methodName, List<dynamic> args) {
  if (objectName == null) {
    return global.invoke(methodName, args);
  }

  // 优先从缓存获取对象,避免频繁的 FFI 调用和对象创建
  JSObject? obj = _objectCache[objectName];
  if (obj == null) {
    final res = global.getProperty(objectName);
    if (res is JSObject) {
      obj = res;
      _objectCache[objectName] = obj;
    } else {
      // 如果获取到的不是对象(可能是 null 或基础类型),则无法调用方法
      // 注意:如果是基础类型,getProperty 内部已经释放了 JSValue
      return null;
    }
  }
  return obj.invoke(methodName, args);
}