猫鼬的架构。静态不是函数

时间:2020-05-02 15:00:10

标签: javascript node.js mongoose

为什么此代码可以正常工作:

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 :(得分:1)

嗯,这个问题与mongoDB和mongoose无关。为此,首先我们需要了解JavaScript中普通函数和箭头函数之间的区别。

箭头功能与常规功能相比,“ 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