Con trỏ this trong typescript

Mọi người giải thích giúp mình tại sao this.user lại bị báo undefined với ạ

File user.model.ts:

var Schema = mongoose.Schema;
let User = new Schema({
    name: String
});

User.pre('save', function (next) {
    this.name = this.name.trim();
    next();
});

export default mongoose.model('Users', User);

File home.controller.ts:

class HomeRoute extends db {
  user: any;
  constructor() {
    super();
    this.user = new User();
  }


  public getAll(req: Request, res: Response, next: NextFunction) {
     console.log(this.user); // in ra màn hình  undefined   
  }

Ý bạn là sao vậy? -_-

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

var kittySchema = mongoose.Schema({
    name: String
});

kittySchema.methods.speak = function () {
  var greeting = this.name
    ? "Meow name is " + this.name
    : "I don't have a name";
  console.log(greeting);
}

var Kitten = mongoose.model('Kitten', kittySchema);

var silence = new Kitten({ name: 'Silence' });
console.log(silence.name); // 'Silence'

var fluffy = new Kitten({ name: 'fluffy' });
fluffy.speak(); // "Meow name is fluffy"
1 Like

Hàm của bạn là một middleware nên được gọi từ trong một hàm khác. this trỏ tới hàn đó nên undefined là đúng r. Bạn bind đối tượng HomeRoute xem.

class HomeRoute extends db {
  user: any;
  constructor() {
    super();
    this.user = new User();
    this.getAll = this.getAll.bind(this);
  }


  public getAll(req: Request, res: Response, next: NextFunction) {
     console.log(this.user); // in ra màn hình  undefined   
  }
1 Like

Cảm ơn bạn, mình đã giải quyết được vấn đề :slight_smile:

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?