Không có phương pháp Ví dụ, phương pháp tĩnh hoặc ảo nào được lưu trữ trong cơ sở dữ liệu. Sự khác biệt giữa các phương thức và các virtual là các virtual được truy cập như các thuộc tính và các phương thức được gọi là các hàm. Không có sự phân biệt giữa instance/static với virtual bởi vì nó không có ý nghĩa gì để có một thuộc tính tĩnh ảo có thể truy cập được trên lớp, nhưng nó có ý nghĩa để có một số phương thức static hoặc các phương thức factory trên lớp.
var PersonSchema = new Schema({
name: {
first: String,
last: String
}
});
PersonSchema.virtual('name.full').get(function() {
return this.name.first + ' ' + this.name.last;
});
var Person = mongoose.model('Person', PersonSchema);
var person = new Person({
name: {
first: 'Alex',
last: 'Ford'
}
});
console.log(person.name.full);
// would print "Alex Ford" to the console
Trong khi phương pháp này được gọi là như chức năng bình thường.
PersonSchema.method('fullName', function() {
return this.name.first + ' ' + this.name.last;
});
var person = new Person({
name: {
first: 'Alex',
last: 'Ford'
}
});
console.log(person.fullName());
// notice this time you call fullName like a function
Bạn cũng có thể "đặt" tài sản ảo như bạn đang sử dụng để có tính chất thường xuyên. Chỉ cần gọi .get
và .set
để thiết lập chức năng cho cả hai hành động. Chú ý trong các .get
bạn trả về một giá trị, trong khi trong các .set
bạn chấp nhận một giá trị và sử dụng nó để đặt thuộc tính không ảo trên tài liệu của bạn.
PersonSchema
.virtual('name.full')
.get(function() {
return this.name.first + ' ' + this.name.last;
})
.set(function (fullName) {
var parts = fullName.split(' ');
this.name.first = parts[0];
this.name.last = parts[1];
});
var person = new Person({
name: {
first: 'Alex',
last: 'Ford'
}
});
console.log(person.name.first);
// would log out "Alex"
person.name.full = 'Billy Bob';
// would set person.name.first and person.name.last appropriately
console.log(person.name.first);
// would log out "Billy"
Bạn về mặt kỹ thuật có thể sử dụng phương pháp cho tất cả mọi thứ và không bao giờ sử dụng tài sản ảo, nhưng tài sản ảo là tao nhã cho những thứ nhất định như các ví dụ tôi đã đưa ra ở đây với person.name.full
.