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)
Может так долбаный хром будет считать хранилище для этого файла.

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

Артист 21.10.2016 01:09

Цитата:

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

Мне кроссплатформенность не нужна, я ж для хрома чисто...

Цитата:

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

Блин.
Как же мне эти настройки сохранить, если у меня3 разных домена получается.

Фоновая страница - 1
Попуп(при нажатии на приложение) страница - 2
Сайт - 3

А настройки одни и те же...

30 чекбоксов, 1 кнопка и строка в 5 символов.

Яростный Меч 21.10.2016 01:18

Цитата:

Сообщение от Артист
Как же мне эти настройки сохранить, если у меня3 разных домена получается.

Фоновая страница - 1
Попуп(при нажатии на приложение) страница - 2
Сайт - 3

в попупе и фоновой странице попробуй сделать iframe с некоторой страницей сайта.

страница в ифрейме будет читать/сохранять настройки.

А общаться с попупом и фоновой страницей - например, через сообщения https://learn.javascript.ru/cross-wi...th-postmessage

Lemme 21.10.2016 01:25

Aetae, наркоманы - тоже люди :agree:

Артист 21.10.2016 01:26

Не получится. (

Само приложение может по сайту лазить и без открытой вкладки с ним.
Т.е. когда страница открыта, я из неё часть ссылок получаю(чтобы поменьше дергать сайт запросами), а так же часть настроек прямо на странице разместил.

Асинхронный метод получения из других файлов не подходит.
Т.к. кругом проверки этих чекбоксов...

Может другое что попробовать?
Что из этого пошустрее?

Цитата:

Cookies (куки).
Хранилище sessionStorage.
Хранилище localStorage.
Web SQL Database.
Local SharedObject.
В принципе тут только Local SharedObject подходит...

Артист 21.10.2016 01:28

Цитата:

Сообщение от Lemme (Сообщение 432420)
Aetae, наркоманы - тоже люди :agree:

При чём тут это?
Если бы я знал JS, таких проблем бы не возникало...
Я даже не знаю, что такое "iframe...

Aetae 21.10.2016 02:29

Если пишешь расширение, потрудись изучить хотбы список API, что тебе предоставляется.
Не нужно даже вникать, достаточно пробежаться взглядом по именам.
Например тебе нужен chrome.storage.

И знание конкретного языка тут не при чём, перед применением инструмента следует с ним ознакомиться хотя бы поверхностно.

warren buffet 21.10.2016 05:46

Цитата:

Сообщение от Артист
Если бы я знал JS

Ты реально задолбал своим мазохизмом. Иди копротивляйся изучению предмета в другое место. Где они копротивленцы тусуются - туда иди.

Это же милое дело - отказаться изучать предмет, отказаться от доказанной сущности и надув щеки требовать нечто иное. Нет не то, другое несите. Не то, и это не то, и то не это, аазаза, рряя, я самый нечастный, ничего мне не нравится, а через жопу не получается.

Иди нах нарцисс.

Артист 21.10.2016 07:30

Цитата:

Сообщение от Aetae (Сообщение 432424)
Если пишешь расширение, потрудись изучить хотбы список API, что тебе предоставляется.
Не нужно даже вникать, достаточно пробежаться взглядом по именам.
Например тебе нужен chrome.storage.

И знание конкретного языка тут не при чём, перед применением инструмента следует с ним ознакомиться хотя бы поверхностно.

Я не знал о его существовании ) Смотрел уроки по созданию приложений, ну и понял так, вот html/php/css вот java script - делай что хочешь, и вот тебе пакет ограничений в нагрузку из - за политики безопасности.
Спасибо.

И опять же, не будет ничего работать с этим асинхронным получением.
Я подключаю скрипт к странице, и сразу же выполняется код, не дожидаясь ответа...

Сохранение:
chrome.storage.sync.set({'ключ': 'значение'})

Получение:
var on_off = 0 // Глобальный массив для хранения значения

chrome.storage.onChanged.addListener // Перехват изменения хранилища
(
	function(changes, namespace) // Обработчик
	{
		if(changes.? == 'ключ') on_off = changes[?].newValue // Тут не понял как делать, как будто при изменении 1 ячейки нужно всё хранилище перебирать...
	}
)
function show_value_storage()
{
	if(on_off == 1) alert('Включено')
	else alert('Выключено')
}
show_value_storage()


Хотя можно сначала получить значение, а потом выполнять код т.е. засунуть код в обработчик ответа от хранилища, но ключей - то несколько...

Цитата:

Сообщение от warren buffet (Сообщение 432427)
Ты реально задолбал своим мазохизмом. Иди копротивляйся изучению предмета в другое место. Где они копротивленцы тусуются - туда иди.

Это же милое дело - отказаться изучать предмет, отказаться от доказанной сущности и надув щеки требовать нечто иное. Нет не то, другое несите. Не то, и это не то, и то не это, аазаза, рряя, я самый нечастный, ничего мне не нравится, а через жопу не получается.

Иди нах нарцисс.

Да ничего я не требовал, я спрашивал совета.
Помогать или нет - это твой выбор, если тебя так бесят новички - можно просто игнорировать такие темы.
И я не считаю себя несчастным, просто попалось несколько трудных моментов, с которыми я сам справиться не смог.
Всё что более - менее мне понятно я сам нагуглил, по примерам, аналогии - кое как накатал.


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