class 未定义的构造函数中的新对象

new object in constructor from class undefined

我在构造函数中从 class 创建一个新对象,每当它运行时,我都会收到一个错误,指出操作在方法中未定义,尽管它是在构造函数中定义的。 Operate 本身已经过全面测试,并且在单独的上下文中运行良好,所以这不是问题所在。我正在用 Babel 构建它,不是 运行 它直接在 Node 7.0.0

import Operate from "./operate"

export default class {

  constructor(Schema) {
    this.schema = Schema
    this.operate = new Operate(this.schema)
    console.log(this.operate.run) // <- Logs just fine
  }

  update(req, res) {
    console.log(this.operate.run) // <- Nada
    this.operate.run(req.body)
      .then(value => {
        res.status(200).json(value)
      })
  }

感觉好像缺少一些基本的东西。我听说这无论如何都不是一个很好的模式,所以请随时提出更好的方法。提前致谢。

更新:这是更新的使用方式。我不怀疑这里有任何问题,因为当我从另一个模块导入控制器作为函数而不是 class

时它工作得很好
import {Router, } from "express"
import Controller from "../controller"
import User from "./user.model"

let controller = new Controller(User)
let router = new Router()

router.post("/", controller.update)

module.exports = router

由此变化:

router.post("/", controller.update)

对此:

router.post("/", controller.update.bind(controller))

当您传递 controller.update 时,它只传递一个指向该方法的指针,与 controller 对象的任何关联都将丢失。然后,当稍后调用 update 方法时,没有与适当对象的关联,因此方法中的 this 处理程序是错误的,你会得到你看到的错误。

您可以在对象内强制绑定 update 方法,或者当您在其他地方传递可能无法正确调用的方法时,您可以使用上述结构来传递该方法的绑定版本。

您还可以修改 update 方法的定义,通过将其添加到构造函数中,将其永久绑定到构造函数中的对象:

this.update = this.update.bind(this);