2016-03-04 30 views
6

ok, jestem nowy w mangusta i próbuje zrozumieć, jak korzystać z właściwości wirtualnych. to jest przykładowy kod, który testowałem.Wirtualny w mangusta, "to" jest pusty obiekt

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

więc spodziewać dziennik być coś takiego:

1457087841956 
2 

ale wyjście jest

1457087841956 
NaN 

i kiedy log 'to' na początku wirtualnego getter, drukuje {}. co robię źle?

Odpowiedz

18

Kwestia jest arrow function stosowane w virtual funkcji sam problem można znaleźć tutaj ES6 anonymous function and schema methods, powodem jest Lexical this cechą arrow function

Aby go rozwiązać, należy zmienić swoje kody jak poniżej

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

dzięki, nie mogłem sobie tego wyobrazić przez milion lat :) –