当前位置: 首页 > 面试题库 >

猫鼬的“静态”方法与“实例”方法

印曜灿
2023-03-14
问题内容

我相信这个问题与此类似,但用语有所不同。从Mongoose 4
文档中:

我们也可以定义自己的自定义文档实例方法。

// define a schema
var animalSchema = new Schema({ name: String, type: String });

// assign a function to the "methods" object of our animalSchema
animalSchema.methods.findSimilarTypes = function (cb) {
  return this.model('Animal').find({ type: this.type }, cb);
}

现在,我们所有的动物实例都可以使用findSimilarTypes方法。

然后:

向模型添加静态方法也很简单。继续我们的animalSchema:

// assign a function to the "statics" object of our animalSchema
animalSchema.statics.findByName = function (name, cb) {
  return this.find({ name: new RegExp(name, 'i') }, cb);
}

var Animal = mongoose.model('Animal', animalSchema);
Animal.findByName('fido', function (err, animals) {
  console.log(animals);
});

似乎通过静态方法,每个动物实例也将具有findByName可用的方法。模式中的staticsmethods对象是什么?有什么区别,为什么我要一个使用另一个?


问题答案:

statics是模型上定义的方法。methods在文档(实例)上定义。

您可能会使用类似以下的 静态 方法Animal.findByName

const fido = await Animal.findByName('fido');
// fido => { name: 'fido', type: 'dog' }

您可能会使用类似以下的实例 方法fido.findSimilarTypes

const dogs = await fido.findSimilarTypes();
// dogs => [ {name:'fido',type:'dog} , {name:'sheeba',type:'dog'} ]

但是您不会这样做,Animals.findSimilarTypes()因为动物是模型,它没有“类型”。findSimilarTypes需要this.type动物模型中不存在的,只有文档实例包含该属性,如模型中所定义。

同样,您不会做¹,fido.findByName因为您findByName需要搜索所有文档,fido而仅仅 是一个 文档。

¹从技术上讲您 可以这样做
,因为实例可以访问集合(this.constructorthis.model('Animal')),但是(至少在这种情况下)使用不使用实例中任何属性的实例方法是没有意义的(至少在这种情况下)。(感谢@AaronDufour指出这一点)



 类似资料:
  • 我只是在看课本上给我的课文,我不是很确定我理解它在说什么。它基本上告诉我静态方法或类方法包含“modifier”关键字static。但我真的不知道那是什么意思? 有谁能用简单的术语给我解释一下什么是静态方法或者类方法吗? 另外,我能得到一个关于实例方法是什么的简单解释吗? 这是他们在课本上给我的: 静态修饰语的存在与否具有重要的实际意义。一个公共类方法可能会在Java处理它所属的类的定义后立即被调

  • 本文向大家介绍Python 实例方法、类方法、静态方法的区别与作用,包括了Python 实例方法、类方法、静态方法的区别与作用的使用技巧和注意事项,需要的朋友参考一下 Python中至少有三种比较常见的方法类型,即实例方法,类方法、静态方法。它们是如何定义的呢?如何调用的呢?它们又有何区别和作用呢?且看下文。 首先,这三种方法都定义在类中。下面我先简单说一下怎么定义和调用的。(PS:实例对象的权限

  • 问题内容: 编辑: 我发现该方法内只返回哈希和盐。我不确定为什么会发生这种情况,但是它表明没有按原样引用模型。 我具有以下架构和以下实例方法: 在这里调用实例方法,然后保存用户: 但是,当我在mongo CLI中查看集合时,没有提及或。 问题答案: 它不起作用的原因是因为我使用的是箭头方法。我必须使其成为正常功能: 原因是箭头功能与常规功能的区别。请查看以下内容以获取更多详细信息: http://

  • 主要内容:Python类实例方法,Python类方法,Python类静态方法和类属性一样,类方法也可以进行更细致的划分,具体可分为 类方法、 实例方法和 静态方法。 和类属性的分类不同,对于初学者来说,区分这 3 种类方法是非常简单的,即采用 @classmethod 修饰的方法为类方法;采用 @staticmethod 修饰的方法为静态方法;不用任何修改的方法为实例方法。 其中 @classmethod 和 @staticmethod 都是函数装饰器,后续章节会对其做详

  • 操作步骤: 菜单栏: Refactor --> Convert to Instance Method

  • 本文向大家介绍Python实例方法、类方法、静态方法的区别与作用详解,包括了Python实例方法、类方法、静态方法的区别与作用详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Python实例方法、类方法、静态方法的区别与作用。分享给大家供大家参考,具体如下: Python中至少有三种比较常见的方法类型,即实例方法,类方法、静态方法。它们是如何定义的呢?如何调用的呢?它们又有何区别和作用