mongoose中的虚拟对象,'this'是空对象

Sha*_* HD 10 mongoose mongodb node.js mongoose-schema

好吧,我是mongoose的新手,并试图了解如何使用虚拟属性.这是我一直在测试的示例代码.

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var objSchema = new Schema({
  created: {type: Number, default: Date.now()},
});

objSchema.virtual('hour').get(()=>{
  //console.log(this);
  var d = new Date(this.created);
  return d.getHours();
});

var obj = mongoose.model('obj', objSchema);

var o = new obj();
o.toObject({virtuals: true});
console.log(o.created);
console.log(o.hour);
Run Code Online (Sandbox Code Playgroud)

所以我希望日志是这样的:

1457087841956
2
Run Code Online (Sandbox Code Playgroud)

但输出是

1457087841956
NaN
Run Code Online (Sandbox Code Playgroud)

当我在虚拟吸气剂的开头记录'this'时,它会打印{}.我究竟做错了什么?

zan*_*ngw 31

问题是arrow functionvirtual函数中使用,同样的问题可以在这里找到ES6匿名函数和模式方法,原因是Lexical这个特性arrow function

要解决此问题,请更改以下代码

objSchema.virtual('hour').get(function(){
    console.log(this.created);
    var d = new Date(this.created);
    return d.getHours();
});
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,在一百万年里无法想象我的自我:) (2认同)
  • 有没有一种优雅的方法可以在使用“胖箭头”语法时始终避免这个问题?谢谢 (2认同)