Node.js nodejs+中的类成员继承;快车

Node.js nodejs+中的类成员继承;快车,node.js,express,inheritance,Node.js,Express,Inheritance,我不太明白类继承和上下文在nodejs+expressjs中是如何工作的 我有3个文件: api.js class API { constructor () { this._id = Math.random() console.log("Instantiated id:" + this._id) } list (req, res, next) { console.log("Instantiated id:" + this._id) } } module.

我不太明白类继承和上下文在nodejs+expressjs中是如何工作的

我有3个文件:

api.js

class API {
  constructor () {
    this._id = Math.random()
    console.log("Instantiated id:" + this._id)
  }

  list (req, res, next) {
    console.log("Instantiated id:" + this._id)
  }
}
module.exports = API
user.js

const API = require('./api.js')

class UserAPI extends API {

  constructor () {
    super()
  }
}
module.exports = UserAPI
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', user.list);
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', (req, res, next) => user.list(req, res, next));
route.js

const API = require('./api.js')

class UserAPI extends API {

  constructor () {
    super()
  }
}
module.exports = UserAPI
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', user.list);
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', (req, res, next) => user.list(req, res, next));
我希望看到的是启动时的ID,然后每次执行GET请求时都使用相同的ID。 但是当我执行GET请求时,我有:
ERROR:TypeError:无法读取未定义的属性“\u id”

派生基类时,如何访问基类中的成员


谢谢

问题不在于类继承,而在于使用list方法的方式。您将它直接传递给
router.get
,这将不起作用,因为您只传递了对函数的引用,而函数不知道
UserAPI
实例的上下文

您可以通过向
路由器传递匿名函数来修复此问题。获取
,然后执行
user.list
,如下所示:

route.js

const API = require('./api.js')

class UserAPI extends API {

  constructor () {
    super()
  }
}
module.exports = UserAPI
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', user.list);
var UserAPI = require('./user.js')
var user = new UserAPI()
router.get('/', (req, res, next) => user.list(req, res, next));

使用express实现API继承是不可能的。检查一下,它完全符合您的要求。

类是JS原型继承的语法糖。I您的案例
当您将函数传递给
路由器时,此
不再来自类。获取
。将您的
list
转换为箭头函数,它将运行r
router.get('/',user.list.bind(this))当我更改为
router.get('/',user.list.bind(this))我得到
实例化的id:undefined
id:undefined
?您甚至没有
id
。检查输入错误,这只是console.log中的文本行:
console.log(“实例化id:+this.\u id)