方法与静力学有什么区别?
Mongoose API将静态定义为
Statics are pretty much the same as methods but allow for defining functions that exist directly on your Model.
究竟是什么意思?直接在模型上存在什么意思?
文档中的静态代码
AnimalSchema.statics.search = function search (name, cb) {
return this.where('name', new RegExp(name, 'i')).exec(cb);
}
Animal.search('Rover', function (err) {
if (err) ...
})
答案 0 :(得分:8)
好像是
'的方法强>'为从Models
构造的文档添加实例方法,而
'的静态强>'添加静态"类"模型本身的方法
来自文档:
架构#方法(方法,[fn])
为从此模式编译的模型构建的文档添加实例方法。
var schema = kittySchema = new Schema(..);
schema.method('meow', function () {
console.log('meeeeeoooooooooooow');
})
Schema#static(name,fn)
添加静态"类"从这个模式编译的模型的方法。
var schema = new Schema(..);
schema.static('findByName', function (name, callback) {
return this.find({ name: name }, callback);
});
答案 1 :(得分:7)
将static
视为“覆盖”“现有”方法。所以直接来自可搜索的文档:
AnimalSchema.statics.search = function search (name, cb) {
return this.where('name', new RegExp(name, 'i')).exec(cb);
}
Animal.search('Rover', function (err) {
if (err) ...
})
这基本上在“全局”方法上设置了不同的签名,但仅在调用此特定模型时应用。
希望能更清楚地解决问题。