You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js中从JavaScript调用Dart类的静态方法?

在Dart JS互操作中实现类静态方法的JS暴露

可以通过dart:js和dart:js_util提供的API,自动将Dart类的静态方法挂载到Node.js的exports对象上,无需手动编写JS胶水代码。

优化后的实现方案

改造你现有的defineStaticMethods方法,利用dart:js_util的setProperty方法,直接给导出的类对象绑定静态方法:

import 'dart:js';
import 'dart:js_util' as js_util;

void defineStaticMethods(dynamic jsClass, Map<String, Function> methods) {
  methods.forEach((methodName, dartFunc) {
    // 将Dart函数包装为JS可调用函数,挂载到类对象上
    js_util.setProperty(jsClass, methodName, allowInterop(dartFunc));
  });
}

// 使用示例
var jsClass = createJSClass('ClassName', (Object self, String value) {
  return ClassName(value);
});

defineStaticMethods(jsClass, {
  'fromJson': (Object jsJson) => ClassName.fromJson(objectToMap(jsJson)),
});

// 将类对象导出到Node.js的exports
js_util.setProperty(context['exports'], 'ClassName', jsClass);

核心逻辑说明

  • allowInterop负责把Dart函数转换成JS环境可调用的函数
  • js_util.setProperty可以直接操作JS对象的属性,包括给类构造函数添加静态方法
  • 整个流程完全在Dart层面完成,不需要手动编写set$ClassName这类JS代码

关于dart-sass的实现思路

dart-sass在处理JS互操作的静态方法暴露时,也是基于类似逻辑:通过Dart的JS互操作API直接操作全局对象或导出对象,将静态方法绑定到对应类的构造函数上,全程避免手动编写胶水代码。

内容的提问来源于stack exchange,提问作者borut

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:06:27