Когда вы создаете методы внутри class
в JavaScript, this
ссылается на экземпляр самого класса.Следовательно, вы можете получить доступ ко всем определениям в class
из любого метода в нем.
Классы - это на самом деле просто функции с синтаксическим сахаром. Проверьте здесь для подробного объяснения того, какклассы работают , включая использование 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();
}
}
}