我在NodeJS中有一个Babel ES5类设置,例如:
import fs from "fs";
// Services
import { aws } from "../../services/aws";
class UserController {
update(req, res, next) {
const { user } = req.body;
if (user) {
req.user = Object.assign(req.user, user);
req.user.save((err, updatedUser) => {
if (err) {
return res.status(422).json(err);
}
return res.json({ user: updatedUser });
});
} else {
return res.sendStatus(400);
}
}
testMethod() {
this.update();
}
}
module.exports = new UserController();
如何从另一个父方法内部访问“更新”方法?在这种情况下很难看到“ this”的定义
答案 0 :(得分:0)
使用this
中显示的testMethod
即可。
如果要确保正在调用模块导出的单例,可以保留实例并对其进行调用。
当然,如果您创建另一个实例,则此方法将崩溃。 对于您而言,您尚未导出类,因此无论如何,任何客户端都无法创建它。
const userController = new UserController()
// class definition here...
// In your class definition, use `userController` instead of `this`.
// For example
testMethod() {
userController.update()
}
module.exports = userController;
答案 1 :(得分:0)
在JavaScript的class
中创建方法时,this
引用类本身的实例。因此,您可以通过class
中的任何方法访问其中的所有定义。
类实际上只是带有语法糖的函数。 Check here for a thorough explanation of how classes work,包括this
的用法。
您可以使用构造函数为类定义变量,如下所示:
class MyClass {
constructor(name) {
// setting a value on "this", which refers to the class object
this.name = name;
}
printName() {
// logging "this.name" which we set in the constructor
console.log(this.name);
}
}
const myObject = new MyClass("Michael");
myObject.printName(); // prints out "Michael"
看看this
在构造函数和类方法中如何工作?
这些类方法实际上只是定义从构造函数分配给this
的函数的简写。
使用您的示例,这是实际发生的情况:
class UserController {
constructor() {
this.update = function(req, res, next) {
const { user } = req.body;
if (user) {
req.user = Object.assign(req.user, user);
req.user.save((err, updatedUser) => {
if (err) {
return res.status(422).json(err);
}
return res.json({ user: updatedUser });
});
} else {
return res.sendStatus(400);
}
}
this.testMethod = function() {
this.update();
}
}
}