2016-03-04 7 views
6

ठीक है, मैं 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); 

तो मैं उम्मीद लॉग कुछ की तरह बनना:

1457087841956 
2 

लेकिन उत्पादन

1457087841956 
NaN 

है और जब मैं 'इस' आभासी गेटर की शुरुआत में प्रवेश करते है, यह प्रिंट करता है {}। मैं क्या गलत कर रहा हूँ?

उत्तर

18

मुद्दा arrow functionvirtual समारोह में प्रयोग किया जाता है, एक ही मुद्दा यहाँ 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

धन्यवाद, एक लाख साल में अपने आत्म को समझ नहीं सका :) –

संबंधित मुद्दे