Понимание кода JS при настройке Redis с Mongoose - PullRequest
0 голосов
/ 23 ноября 2018

Я пытался понять кеширование в NodeJS с помощью redis.

В лекции преподаватель сказал, что лучшее место для настройки кеширования - непосредственно перед функцией exec в mongoose.

Итак, чтобы сделать это, он сделал

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, argument); откуда берется этот аргумент?

Может кто-нибудь помочь мне, ответив на оба вопроса?

1 Ответ

0 голосов
/ 23 ноября 2018

Что будет классифицировать mongoose.Query.prototype.exec;как?тип значения или ссылочный тип?Потому что если это ссылочный тип, то при изменении 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.Они оба просто в конечном итоге будут указывать на два разных объекта.

Может ли кто-нибудь объяснить это в растянутом виде, то есть в точках применения к где?

В этом случае это 'будет объектом, для которого будет вызываться эта функция, т.е. экземпляром Query.

и он передает аргумент (this, аргумент);откуда взялся этот аргумент?

Если не указан какой-то код, который вы пропустили для копирования вставки в вопросе, argument представляется опечаткой.Вероятно, он имел в виду встроенный объект arguments, который доступен внутри каждой функции и состоит из аргументов, переданных функции.Вот ссылка .

На высоком уровне инструктор пытается переопределить встроенное поведение функции Query.exec(), добавив некоторые свои собственные настройки.обработка.Сначала он создает «резервную копию» исходной функции, затем указывает Query.exec на свою пользовательскую функцию, которая добавляет пользовательскую обработку (оператор log), а затем передает управление резервной копии, т. Е. Выполняет встроенное поведение.Кто бы ни вызвал exec () для экземпляра Query после этой точки, он увидит переопределенную функциональность - сначала оператор log, затем встроенное поведение exec()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...