嵌套类中的NodeJs/Javascript访问父方法

嵌套类中的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(

如何在工具栏内使用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('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');
        });
    }
}