2016-03-04 7 views
6

ok、私はmongooseを初めて使い、仮想プロパティの使い方を理解しようとしています。これは私がテストしてきたサンプルコードです。mongooseのバーチャル、 'this'は空のオブジェクト

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); 

はので、私は、ログが何かのようであることを期待:

1457087841956 
2 

が、出力が

1457087841956 
NaN 

で、i 'は、この' バーチャルゲッターの最初にログインしたときに、 {}が印刷されます。 何が間違っていますか?

答えて

18

問題がvirtual機能で使用arrow functionで、同じ問題がここにES6 anonymous function and schema methods見つけることができ、その理由は、それを解決するためにarrow function

Lexical thisな特徴は、以下のようにあなたのコードを変更してくださいある

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

ありがとう、百万年の私の自己を理解することができなかった:) –

関連する問題