NodeJs/Javascript 在嵌套中访问父方法 class
NodeJs/Javascript access parent method in nested class
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');
});
}
}
我如何在 bar.on... 函数中使用 Foo 的 emit 函数,就像
this.emit('log', 'Hello from Foo');
ES6 中的函数?
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() 处理程序中有不同的上下文,因此您需要将其绑定到外部范围:
bar.on('log', function(log) {
this.emits('log', 'Hello from Foo from Bar');
}.bind(this));
或保留对它的引用:
var self = this;
bar.on('log', function(log) {
self.emits('log', 'Hello from Foo from Bar');
});
或者当您使用 ES6/ES2015 时,您可以使用箭头函数来保持外部绑定(并且您的转译器将为您执行上述操作之一):
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');
});
}
}
除了更短、更简洁的语法外,箭头函数还定义了一个 "lexical this
",这意味着箭头函数中的 this
关键字解析为定义该函数的实例。
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');
});
}
}
我如何在 bar.on... 函数中使用 Foo 的 emit 函数,就像
this.emit('log', 'Hello from Foo');
ES6 中的函数?
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() 处理程序中有不同的上下文,因此您需要将其绑定到外部范围:
bar.on('log', function(log) {
this.emits('log', 'Hello from Foo from Bar');
}.bind(this));
或保留对它的引用:
var self = this;
bar.on('log', function(log) {
self.emits('log', 'Hello from Foo from Bar');
});
或者当您使用 ES6/ES2015 时,您可以使用箭头函数来保持外部绑定(并且您的转译器将为您执行上述操作之一):
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');
});
}
}
除了更短、更简洁的语法外,箭头函数还定义了一个 "lexical this
",这意味着箭头函数中的 this
关键字解析为定义该函数的实例。