gpt4 book ai didi

javascript - 使用 Mongoose 设置 redis 时理解 JS 代码

转载 作者:可可西里 更新时间:2023-11-01 11:06:23 24 4
gpt4 key购买 nike

我正在尝试使用 Redis 了解 NodeJS 中的缓存。

在讲座中,讲师告诉您设置缓存的最佳位置是在 mongoose 中的 exec 函数之前。

所以为了做到这一点,他做到了

const mongoose = require('mongoose')

const exec = mongoose.Query.prototype.exec;
//Redis logic
mongoose.Query.prototype.exec = function () {
console.log("i am here")
return exec.apply(this, argument);
}

1st: mongoose.Query.prototype.exec; 会被归类为什么?值类型还是引用类型?因为如果它是引用类型,那么当我们更改 mongoose.Query.prototype.exec = function 时,它的值不应该也改变吗?

2nd 我无法理解这里的这一行 return exec.apply(this, argument); 有人可以解释一下吗,即 this in apply 指向哪里?他正在传递参数 (this, argument); 这个参数从哪里来?

有人可以通过回答上述两个问题来帮助我吗?

最佳答案

What will classify mongoose.Query.prototype.exec; as? value type or reference type? Because if it is a reference type then when we change mongoose.Query.prototype.exec = function

exec是引用类型,但是它被赋予了另一个引用变量mongoose.Query.prototype.exec的值。你可以这样想:mongoose.Query.prototype.exec 本身指向内存中的一个对象(一个Function对象),现在赋值后,exec也指向同一个对象 - 换句话说,对象的内存地址在分配期间从 mongoose.Query.prototype.exec 复制(按值)到 exec .因此变量 mongoose.Query.prototype.exec 本身的值,即存储在其中的内存地址,可以在不影响其他变量 exec 的情况下更改。它们最终都将指向两个不同的对象。

Can someone explain this in stretch i.e this in apply points to where?

在这种情况下,它将是调用此函数的对象,即 Query 实例。

and he is passing argument (this, argument); where does that Argument come from?

除非您在问题中复制粘贴时遗漏了一些代码,否则 argument 似乎是一个拼写错误。他可能指的是内置对象 arguments,它在每个函数内部都可以访问,并且由传递给函数的参数组成。这是一个reference .

在高层次上,讲师试图做的是覆盖函数 Query.exec() 的内置行为,以添加一些他自己的自定义处理。他首先创建原始函数的“备份”,然后将 Query.exec 指向他的自定义函数,该函数添加了自定义处理(日志语句),然后将控制权移交给备份,即继续执行内置行为。在此之后调用 Query 实例上的 exec() 的任何人都将看到覆盖的功能 - 首先是日志语句,然后是 exec()

的内置行为

关于javascript - 使用 Mongoose 设置 redis 时理解 JS 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53438970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com