如何通过JS -Dart interop从JavaScript访问`this`?

时间:2013-07-17 05:26:29

标签: dart dart-js-interop

我需要从Dart函数访问JavaScript对象的this。我正在通过Dart-JS interop向JavaScript对象添加一个新方法。我需要从Dart中定义的方法访问JavaScript对象上的属性。

1 个答案:

答案 0 :(得分:5)

Callback构造函数可以从JavaScript传递this。根据{{​​3}}:

new Callback.many(Function f, {bool withThis: false})
new Callback.once(Function f, {bool withThis: false})

以下是一个例子:

飞镖码:

import 'dart:html';
import 'package:js/js.dart' as js;

void main() {
  var greeter = js.context['greeter'];
  var msg = greeter['greet']('Bob');
  greeter['doCoolStuff'] = new js.Callback.many(doCoolStuff, withThis: true);
}

doCoolStuff(jsThis) {
  print(jsThis['msg']);
}

注意在创建回调时使用withThis: true。来自JavaScript的this作为回调函数的第一个参数传入。在这种情况下,我给它命名为jsThis

JavaScript代码:

function Greeter() {
  this.msg = 'hello';

  var that = this;
  document.getElementById('clickme').addEventListener('click', function() {
    that.doCoolStuff();
  });
}

Greeter.prototype.greet = function(name) {
  return this.msg + ' ' + name;
}

var greeter = new Greeter();

document.getElementById('clickme').addEventListener('click', function() {
  greeter.doCoolStuff(); // comes from Dart land
});