我正在使用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的本质,但我想知道是否会有任何"无缝"替代或语法来继续绑定。
注意:bar
和baz
可能是static
,但就我看到的问题而言相同
谢谢!