嵌套类中的NodeJs/Javascript访问父方法
如何在工具栏内使用Foo中的emit函数。。。功能类似于嵌套类中的NodeJs/Javascript访问父方法,javascript,node.js,class,ecmascript-6,eventemitter,Javascript,Node.js,Class,Ecmascript 6,Eventemitter,如何在工具栏内使用Foo中的emit函数。。。功能类似于 class Foo extends EventEmitter { constructor(name) { this.name = name; } funcA(sourceRepositoryPath, branch) { this.emit('log', 'Hello from Foo'); var bar = new Bar(); bar.on(
class Foo extends EventEmitter {
constructor(name) {
this.name = name;
}
funcA(sourceRepositoryPath, branch) {
this.emit('log', 'Hello from Foo');
var bar = new Bar();
bar.on('log', function(log) {
this.emits('log', 'Hello from Foo from Bar');
});
}
}
ES6中的功能
this.emit('log', 'Hello from Foo');
在bar.on()处理程序中有不同的上下文,因此需要将其绑定到外部作用域:
var foo = new Foo();
foo.funcA();
foo.on('log', function(log) {
// expects : Hello from Foo && Hello from Foo from Bar
// gets : Hello From Foo
});
或保留对其的引用:
bar.on('log', function(log) {
this.emits('log', 'Hello from Foo from Bar');
}.bind(this));
或者,当您使用ES6/ES2015时,您可以使用箭头功能来保持外部绑定(您的transpiler将为您执行上述操作之一):
希望有帮助 箭头函数语法解决了这个问题:
bar.on('log', (log) => {
self.emits('log', 'Hello from Foo from Bar');
});
除了较短、更简洁的语法外,箭头函数定义了一个“词法
this
”,这意味着箭头函数中的this
关键字解析为定义函数的实例。为什么人们总是写“EC6”?这个词在哪里用过吗?我只是缩写了Ecmacript 6,但我不知道它是否常用。标准缩写是ES6(from-)。我只是想知道,因为我已经看过“EC6”很多次了,但它真的毫无意义:-)好的,谢谢你提到这一点,我以后会使用正确的缩写:)
bar.on('log', (log) => {
self.emits('log', 'Hello from Foo from Bar');
});
class Foo extends EventEmitter {
constructor(name) {
this.name = name;
}
funcA(sourceRepositoryPath, branch) {
this.emit('log', 'Hello from Foo');
var bar = new Bar();
bar.on('log', (log) => {
this.emits('log', 'Hello from Foo from Bar');
});
}
}