Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为可以从Dart调用的JavaScript对象创建代理/传递的最干净方法_Javascript_Dart_Dart Js Interop - Fatal编程技术网

为可以从Dart调用的JavaScript对象创建代理/传递的最干净方法

为可以从Dart调用的JavaScript对象创建代理/传递的最干净方法,javascript,dart,dart-js-interop,Javascript,Dart,Dart Js Interop,这的确很奇怪,但请容忍我: 我正在使用Dart的js互操作包,以便可以从Dart调用JavaScript 我必须使用的系统有一个通过特定全局JavaScript对象的通信路径——这个对象被插入到JavaScript上下文中,作为调用本机代码的一种方式,但它不是一个真正的JavaScript对象;有点粗糙 我不能直接对此对象创建Dart代理,因为代理代码依赖于某些构造函数和原型链的某些方面,而这些方面对于这个黑客对象来说是不存在的。具体来说,dart2js生成的JSObjectJSObject函数

这的确很奇怪,但请容忍我:

我正在使用Dart的js互操作包,以便可以从Dart调用JavaScript

我必须使用的系统有一个通过特定全局JavaScript对象的通信路径——这个对象被插入到JavaScript上下文中,作为调用本机代码的一种方式,但它不是一个真正的JavaScript对象;有点粗糙

我不能直接对此对象创建Dart代理,因为代理代码依赖于某些构造函数和原型链的某些方面,而这些方面对于这个黑客对象来说是不存在的。具体来说,dart2js生成的JSObjectJSObject函数试图调用“constr.bind.apply”,其中constr是JS对象的构造函数。这个对象没有.bind属性,因为它没有从其他东西正确继承,而且我所有添加/修复原型链的尝试都失败了

如果我能解决这个问题,那就太好了。但我的另一个选择是代理一个代理——制作一个真正的Javascript对象,包装并代理古怪的hacky原生对象,然后制作一个Dart代理

我很好奇制作JS代理的最干净的方法是什么——我想用不同数量的参数从Dart调用各种函数,并让调用干净地传递到本机对象,而不必通过确保将添加到本机对象的任何函数添加到代理来持续维护我的JS代理


有没有人有什么好的/令人毛骨悚然的想法来让这个代理防白痴,这样它就不需要很多维护,只需要自动重定向对本机对象的调用?

constr.bind.apply
是从Dart创建Js对象时唯一的调用。您只需创建一个JS函数来创建特定的JS对象(例如
createWtfObject()
)。一旦在JS端创建(通过从Dart
context.callMethod('createWtfObject')
调用),您应该能够从Dart端毫无问题地使用它