yarkov
@yarkov
Помог ответ? Отметь решением.

Какой метод или свойство надо переопределить у класса?

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)
  • Вопрос задан
  • 157 просмотров
Решения вопроса 1
yarkov
@yarkov Автор вопроса, куратор тега JavaScript
Помог ответ? Отметь решением.
Не совсем то, чего я хотел, но все же решил оставить так:
/* @flow */

const storage: Object = {}

class MemoryStorage implements MemoryStorageInterface {
  get length (): number {
    return Object.keys(this.storage).length
  }

  get storage (): Object {
    return storage
  }

  getItem (key: string): string | null {
    return (key in this.storage) ? this.storage[key] : null
  }

  setItem (key: string, value: any): void {
    this.storage[key] = value
  }

  removeItem (key: string) {
    const found = (key in this.storage)
    if (found) {
      delete this.storage[key]
    }
  }

  clear () {
    for (const k in this.storage) {
      delete this.storage[k]
    }
  }

}

export default new MemoryStorage()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
archakov06
@archakov06
Frontend-разработчик (ReactJS)
Ничего переопределять не надо. Ты возвращаешь экземпляр класса. Тебе надо создать доп. метод, типа getStorage(), который будет возвращать ls при каждом вызове метода.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы