自从用上了ES6之后, 但凡见到 function() {} 总要改成 () => {}, 觉得这样既优雅又美观. 直到今天debug了半天, 终于翻然悔悟, 在心里还不清楚this指向的时候, 请慎用 Arrow Function!
比如Mongoose定义Schema的statics/methods的时候:
XXXSchema.statics.list = () => {
return this.find().exec()
}
乍一看这样并没有错误, 实际上此处的this并不会指向你认为的对象.
因为 Arrow Function是 Lexical scoping, this指向定义Arrow Function时外围, 而不是运行时的对象
可以看下这篇文章: Do ES6 Arrow Functions Really Solve “this” In JavaScript? 说的很详细