用类实例绑定对类方法的引用的无缝方式

时间:2017-02-16 16:53:15

标签: javascript callback ecmascript-6 babeljs

我正在使用babel预设ES2015构建应用程序。

class Foo {
  bar(arg) {
    console.log(arg)
  }

  baz(arg) {
     this.bar(arg)
  }
}

function callBaz(callback) {
  callback("hello, wolrd")
}

instance = new Foo()

callBaz(instance.baz)
// Uncaught TypeError: Cannot read property 'bar' of undefined

我希望能够在Foo实例的上下文中传递对baz的引用。 有两种选择:

选项1:

class Foo {
  bar(arg) {
    console.log(arg)
  }

  baz() {
     let self = this
     return(function(callback) {
       self.bar(callback)
     }
  }
}

function callBaz(baz) {
   baz("hello, wolrd")
}

instance = new Foo()

callBaz(instance.baz())
// hello, world

选项2:

class Foo {
  bar(arg) {
    console.log(arg)
  }

  baz(arg) {
     this.bar(arg);
  }
}

function callBaz(callback) {
   callback("hello, wolrd")
}

instance = new Foo()
var baz = instance.baz.bind(instance)
callBaz(baz)
// hello, world 

基本上我不喜欢任何这些解决方案,我正在寻找另一种方法来将实例的上下文与回调方法一起注入。

我可以想象通过以下两种方式做这样的事情:

  • 使用我熟悉的一些原生javascript范例/语法(ES2015,2016?)
  • 使用任何Babel转换插件?
  • 在父Foo类上添加中间层?
  • 使用任何第三方库帮助吗?

当然我的问题并不是真的,因为它本身就是Javascript的本质,但我想知道是否会有任何"无缝"替代或语法来继续绑定。

注意:barbaz可能是static,但就我看到的问题而言相同

谢谢!

0 个答案:

没有答案