К сожалению, если вы пытаетесь «получить» ключ, вы не можете вернуть карту, так как вы запрашиваете ключ, поэтому он должен вернуть ключ.Таким образом, вы не можете связать этот метод.Но любой метод, который не должен возвращать что-то по умолчанию (IE будет недействительным), мы можем сделать это:
cache = cache.getKey (key) ||cache.setKey (ключ) .get (ключ);
Возвращает логическое значение, как ||Символ означает возвращать true, если любой из них равен true.
Но если вы хотите выполнить цепочку, которую выполняет JQuery, это легко достижимо!То, что вы хотите сделать, это вернуть this
или объект в каждом методе.
Примерно так:
function isObject(arg) {
const typeOfObj = typeof arg;
return (typeOfObj === 'object' || typeOfObj === 'function') && arg !== null;
}
class Cache {
constructor() {
this.map = new Map();
this.weakmap = new WeakMap();
}
setKey(key) {
const map = this[isObject(key) ? 'weakmap' : 'map'];
map.set(key, new Cache());
return this; // HERE'S THE IMPORTANT PART
}
}
let counter = 1;
function foo() {
counter += 1;
return counter;
}
const id1 = Symbol('id');
const id2 = Symbol('id');
const memoizedFoo = memoize(foo);
console.log(memoizedFoo(id1)); // 2
console.log(memoizedFoo(id1)); // 2
console.log(memoizedFoo(id2)); // 3
console.log(memoizedFoo(id2)); // 3