Как реализуется функция выборки элементов в DOM, с последующим кешированием?
По сути задача не сложная, создать объект для сохранения результатов и писать туда, но столкнулся с несколькими проблемами, на которые не нашел ответа самостоятельно.
Вариант 1:
function getDomElem(func) {
var cache = {};
// целевой объект поиска передаем в параметре
return function (target, selector) {
if (!(selector in cache)) {
cache[selector] = func.call(target, selector);
}
return cache[selector];
console.log(cache);
};
}
Использование:
// сделаем поиск на основе querySelector
var getElem = getDomElem(Document.prototype.querySelector);
var g = getElem(document, 'div');
// получим div как и задумано
var h = getElem(g, 'p');
// ошибка!!!! Uncaught TypeError: Illegal invocation
console.log(g, h)
Вариант 2:
function getDomElem(func) {
var cache = {};
return function (selector) {
if (!(selector in cache)) {
// хочу сделать объектом поиска текущий объект на котором была вызвана функция
cache[selector] = func.call(this, selector);
}
return cache[selector];
console.log(cache);
};
}
var getElem = getDomElem(Document.prototype.querySelector);
var g = document.getElem('div');
// ошибка!!! Uncaught TypeError: document.getElem is not a function
Сборка персонального компьютера от Artline: умный выбор для современных пользователей