Какой метод или свойство надо переопределить у класса? let ls = {}
class MemoryStorage {
getItem (name) {
return (name in ls) ? ls[name] : null
}
setItem (name, value) {
ls[name] = value
}
removeItem (name) {
const found = name in ls
if (found) {
delete ls[name]
}
}
clear () {
ls = {}
}
}
const storage = new MemoryStorage()
console.log(Object.keys(window.localStorage)) // выведет массив ключей window.localStorage
console.log(Object.keys(storage)) // выведет пустой массивUPD:class MemoryStorage {
get length () {
return Object.keys(this).length
}
getItem (name) {
return (name in this) ? this[name] : null
}
setItem (name, value) {
this[name] = value
}
removeItem (name) {
const found = (name in this)
if (found) {
delete this[name]
}
}
clear () {
for (const k in this) {
delete this[k]
}
}
}
const storage = new MemoryStorage()
storage.setItem('getItem', 'getItem') // Переопределяется getItem [КАК ИЗБЕЖАТЬ???]
const item = storage.getItem('getItem') // TypeError: storage.getItem is not a function
console.log('item:', item)
storage.removeItem('getItem')
storage.setItem('test', 'test')
console.log('Length:', storage.length)
console.log(Object.keys(storage))
storage.clear()
console.log(Object.keys(storage))
console.log('Length:', storage.length)

21 Авг 2019 в 07:00
198 +1
0
Ответы
1

Для избежания переопределения метода getItem в классе MemoryStorage, необходимо использовать другое имя для хранилища объекта this. Например, можно назвать его _storage и обращаться к нему в методах класса:

class MemoryStorage {
constructor() {
this._storage = {}
}
get length () {
return Object.keys(this._storage).length
}
getItem (name) {
return (name in this._storage) ? this._storage[name] : null
}
setItem (name, value) {
this._storage[name] = value
}
removeItem (name) {
const found = (name in this._storage)
if (found) {
delete this._storage[name]
}
}
clear () {
for (const k in this._storage) {
delete this._storage[k]
}
}
}
const storage = new MemoryStorage()
storage.setItem('getItem', 'getItem') // Не переопределяется getItem
const item = storage.getItem('getItem')
console.log('item:', item)
storage.removeItem('getItem')
storage.setItem('test', 'test')
console.log('Length:', storage.length)
console.log(Object.keys(storage._storage))
storage.clear()
console.log(Object.keys(storage._storage))
console.log('Length:', storage.length)

Теперь метод getItem не будет переопределен при использовании setItem.

20 Апр в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 706 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир