Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как сделать обёртку для функции? (https://javascript.ru/forum/misc/65466-kak-sdelat-objortku-dlya-funkcii.html)

Артист 20.10.2016 22:40

Как сделать обёртку для функции?
 
Как сделать, чтобы вот так работало:
local_storage['name'] = 'sdfsf'
var s = local_storage['name']


Так явно не будет работать...
function local_storage(name)
{
	return localStorage[name]
}


Т.е. засунуть localStorage в функцию, оставив для неё такой же синтаксис...

Артист 20.10.2016 23:15

https://learn.javascript.ru/decorators

Нихрена не понятно...

Так?
function local_storage(name)
{
	return function()
	{
		return localStorage.apply(name)
	}
}

Aetae 20.10.2016 23:28

local_storage = localStorage; // =)


Если же говорить вообще, те: "Как сделать из функции объект с динамическими свойствами?", то ответ - никак. Объект - это объект, функция - это функция.

..но если очень хочется, то можно через Proxy(не в IE).

Артист 20.10.2016 23:44

Если так сделать:
local_storage = localStorage

То как к массиву нельзя обращаться?

А как функцию сделать?

Просто хотел попобовать сделать 1 файл, подключать его везде, где нужно сохранить/получить.
Может так долбаный хром будет считать хранилище для этого файла.

Lemme 21.10.2016 00:00

Цитата:

..но если очень хочется, то можно через Proxy(не в IE).
Цитата:

Может так долбаный хром будет считать хранилище для этого файла.
const local_storage = new Proxy(localStorage, {
  get: (target, prop) => JSON.parse(target.getItem(prop)),
  set (target, prop, value) {
    target.setItem(prop, JSON.stringify(value))
  }
})

local_storage['name'] = 'sdfsf'
alert(local_storage['name'])

Артист 21.10.2016 00:04

Пишет:

Цитата:

error: Unexpected token {

Lemme 21.10.2016 00:16

Артист, так как писал тут, то допустил ошибку, сейчас все должно работать.

Артист 21.10.2016 00:20

Спасибо )

Я погуглил пока что, так тоже работает:

const local_storage = new Proxy
(
	localStorage,
	{
		get(target, prop)
        {
        	return target.getItem(prop)
        },
		set(target, prop, value)
		{
			target.setItem(prop, value)
            return true
		}
	}
)

local_storage['name'] = 'sdtyuf'
alert(local_storage['name'])

Lemme 21.10.2016 00:22

Цитата:

Я погуглил пока что, так тоже работает:
Артист, почему бы и нет. ведь тут написано ровно тоже самое, если убрать бесполезный return true и добавить JSON.stringify/parse

Aetae 21.10.2016 00:43

Но зачем? К локалсотраджу можно и так обращаться как к объекту, бай дезижн блин. =\
А прокси не работает в IE. Ни в каком IE.

Цитата:

Сообщение от Артист (Сообщение 432407)
Может так долбаный хром будет считать хранилище для этого файла.

Локалсторадж привязан только и исключительно к текущему домену.


Часовой пояс GMT +3, время: 05:51.