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

我从构造函数中的类创build一个新的对象,每当它运行时,我得到一个错误,操作未定义的方法,虽然它在构造函数中定义。 操作本身是经过彻底的testing,并在单独的环境中工作,所以这不是问题。 我使用Babel构build它, 而不是直接在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) }) } 

在这里输入图像说明

这感觉就像我错过了一些根本的东西。 我听说这不是一个伟大的模式,所以请随时提出一个更好的方法。 非常感谢。

更新:这是如何使用更新。 我不怀疑这里有任何问题,因为它已经工作得很好,当我从另一个模块导入控制器作为一个function,而不是一个类

 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);