目前我正在使用Babel在ES6中编写Node.js后端。不幸的是,我在扩展特定类时遇到了一种奇怪的行为。我在扩展类中定义的一些方法是未定义的。除非我使用ES7语法将它们绑定到属性。
这是给我这种奇怪行为的实际代码:
import { Router } from 'express';
class MyCustomRouter extends Router
{
constructor() {
super();
this.methodWorks(); // works like a charm.
this.methodDoesnt(); // throws TypeError: _this.methodDoesnt is not a function
}
methodWorks = () => {
// some content
}
methodDoesnt() {
// some content
}
}
这实际上是从Router
库扩展expressjs
。所以现在我只是好奇是否有人可以解释这种行为和/或是否有办法解决这个问题。
答案 0 :(得分:1)
我查看了ExpressJS本身的代码,找到了一些解释。显然,他们喜欢从Router
的构造函数返回一个全新的不同上下文。这解释了为什么this
完全不同而且不包含我的方法......