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);
我在构造函数中从 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);