iRo*_*tia 1 javascript mongoose redis node.js
我试图使用 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);
}
Run Code Online (Sandbox Code Playgroud)
第一:会分类mongoose.Query.prototype.exec;成什么?值类型还是引用类型?因为如果它是一个引用类型,那么当我们改变时, mongoose.Query.prototype.exec = function它的值不应该也改变吗?
第二,我无法在这里理解这条线return exec.apply(this, argument);有人可以解释这一点,即这适用于哪里?并且他正在传递参数(this, argument);该参数从何而来?
有人可以通过回答上述两个问题来帮助我吗?
将分类mongoose.Query.prototype.exec; 作为?值类型还是引用类型?因为如果它是一个引用类型那么当我们改变 mongoose.Query.prototype.exec = function
exec是引用类型,但它被分配了另一个引用变量的值mongoose.Query.prototype.exec。你可以这样想:mongoose.Query.prototype.exec本身就是指向内存中的一个对象(一个Function对象),现在赋值之后,exec也是指向同一个对象——也就是说,对象的内存地址被复制了(通过value) from mongoose.Query.prototype.exectoexec在赋值期间。因此,变量mongoose.Query.prototype.exec本身的值,即存储在其中的内存地址,可以在不影响其他变量的情况下进行更改exec。它们最终都会指向两个不同的对象。
有人可以详细解释这一点,即 this in apply 指向哪里?
在这种情况下,它将是调用此函数的对象,即Query实例。
他正在传递参数(this,argument);该参数从何而来?
除非您遗漏了一些代码来复制粘贴问题,否则这argument似乎是一个错字。他可能指的arguments是在每个函数内部都可以访问的内置对象,它由传递给函数的参数组成。这里有一个参考。
在较高的层次上,教师试图做的是覆盖函数的内置行为Query.exec()以添加一些他自己的自定义处理。他首先创建原始函数的“备份”,然后将 Query.exec 指向他的自定义函数,该函数添加自定义处理(日志语句),然后将控制权移交给备份,即继续执行内置行为。在此之后调用 Query 实例上的 exec() 的人将看到覆盖的功能 - 首先是日志语句,然后是exec()
| 归档时间: |
|
| 查看次数: |
266 次 |
| 最近记录: |