Пн goose схема. Статика это не функция - PullRequest
0 голосов
/ 02 мая 2020

Почему этот код работает нормально:

schema.statics.findByName = function (name) {
  return this.findOne({ username: name });
};

Но когда я пытаюсь это сделать

schema.statics.findByName =  (name) => {
  return this.findOne({ username: name });
};

Я получаю TypeError: this.findOne is not a function ошибку при вызове User.findByName(username)

1 Ответ

0 голосов
/ 02 мая 2020

Ну, эта проблема не связана с mongoDB и mon goose. Для этого сначала нам нужно понять разницу между нормальной функцией и функциями стрелки в JavaScript.

Обработка «this» отличается в функциях стрелки по сравнению с обычными функциями. Короче говоря, для функций со стрелками привязка этого отсутствует.

В обычных функциях ключевое слово this представляет объект, который вызывает функцию, которая может быть окном, документом, кнопкой или чем-то еще.

В функциях со стрелками ключевое слово this всегда представляет объект, который определил функцию со стрелкой. У них этого нет.

let user = { 
name: "Stackoverflow", 
myArrowFunc:() => { 
    console.log("hello " + this.name); // no 'this' binding here
}, 
myNormalFunc(){        
    console.log("Welcome to " + this.name); // 'this' binding works here
}
};

user.myArrowFunc(); // Hello undefined
user.myNormalFunc(); // Welcome to Stackoverflow
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...