Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 07.01.2012, 18:46
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

(function(i){function e(b,a){if(null==a)return localStorage.removeItem(b),!0;switch(typeof a){case "string":a+="s";break;case "number":a+="n";break;case "boolean":a+="b";break;case "function":a=a.toString().replace(/\s+/g," ").match(/function.*{(.*)}/)[1]+"f";break;case "object":a=JSON.stringify(a)+"o"}try{return localStorage.setItem(b,a),!0}catch(c){if(c==QUOTA_EXCEEDED_ERR)return console.log("Local storage overflowing"),!1}}function f(b,a){var a=localStorage.getItem(b),c=a[a.length-1],a=a.slice(0,
-1);switch(c){case "s":return a;case "n":return Number(a);case "b":return Boolean(a);case "f":return Function(a);case "o":return JSON.parse(a)}}function h(b,a){if(a)for(c in b){if(c in localStorage)break;e(c,b[c])}else for(var c in b)e(c,b[c])}if(!localStorage)return console.log("localStorage not supported"),!1;window[i]=function(b,a){if(0==arguments.length){var c={},d;for(d in localStorage)c[d]=f(d);return c}if(1==arguments.length){if(null===b)return localStorage.clear(),!0;if("object"==typeof b)return h(b),
!0;c=!1}else if(2==arguments.length){if("object"==typeof b)return h(b,a),!0;c=!0}var g=b.indexOf(".");if(-1==g)if(c)e(b,a);else return f(b);else if(0==g)if(c)for(d in localStorage)-1!=d.indexOf(b)&&d.indexOf(b)+b.length==d.length&&e(d,a);else{c=[];for(d in localStorage)-1!=d.indexOf(b)&&d.indexOf(b)+b.length==d.length&&c.push(f(d));return c}else if(g==b.length-1)if(c)for(d in localStorage)0==d.indexOf(b)&&e(d,a);else{c=[];for(d in localStorage)0==d.indexOf(b)&&c.push(f(d));return c}else if(c)e(b,
a);else return f(b);return!0}})
('storage')

//как это делаю я
storage('key', {a:20,b:400})
alert(storage('key').b  )// 400

storage('key', 2)
alert(typeof storage('key'))//number

storage('key', "93444")
alert(typeof storage('key'))//string

storage('key', false)
alert(typeof storage('key'))//boolean

storage('key',      function(){alert('я функция прямо из базы данных!')}     )
alert(typeof storage('key')) //function

storage('key')()//вызовем прямо из хранилища

storage('key', null) // почистим


теперь посмотрим как это сделаешь ты

Последний раз редактировалось Livaanderiamarum, 07.01.2012 в 18:53.
Ответить с цитированием
  #12 (permalink)  
Старый 07.01.2012, 19:09
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

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

потом засунь число и получи его и выведи его тип алертом.
потом засунь строку '93444' и получи её и выведи тип алертом.
посмотрим как справишься...
У меня встречный вопрос, а зачем мне это делать? Насколько мне известно localStorage сделан не для того что бы из него вытаскивать значения какого-то там объекта в срочном порядке. Если я в него что-то кладу то на хранение а не для того что бы срочно что-то получить с него. Ну а если уж очень надо будет, тогда возпользуюсь опять же встроенными возможностями:

localStorage.setItem( "myItem", JSON.stringify( {a: 2, b: "blah"} ) );
var obj = JSON.parse( localStorage.getItem( 'myItem' ) );
alert( obj.b );
за чем мне все это --^ за менять на вон ту хрень что у тебя в первом посте???
Ответить с цитированием
  #13 (permalink)  
Старый 07.01.2012, 19:19
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от devote Посмотреть сообщение
У меня встречный вопрос, а зачем мне это делать? Насколько мне известно localStorage сделан не для того что бы из него вытаскивать значения какого-то там объекта в срочном порядке. Если я в него что-то кладу то на хранение а не для того что бы срочно что-то получить с него. Ну а если уж очень надо будет, тогда возпользуюсь опять же встроенными возможностями:

localStorage.setItem( "myItem", JSON.stringify( {a: 2, b: "blah"} ) );
var obj = JSON.parse( localStorage.getItem( 'myItem' ) );
alert( obj.b );
за чем мне все это --^ за менять на вон ту хрень что у тебя в первом посте???
зачем мне менять storge('key', value) на хрень выше)?

у меня например на сайте есть окна их много штук 300, у них всех есть обьект с настройками, и чтобы получить значение настроек одного из окна мне нужно выгружать ВЕСЬ ОБЬЕКТ с настройками и парсить его и доставать нужное значение.
теперь же я могу хранить настройки для каждого окна отдельно.
например storge('window.chat') и storge('window.console')

при том я могу очистить настройки окон "в один клик"
storge('window.', null)

а в будущих версиях смогу еще и обращаться так storge('window.cha*', null) тогда удалится все что начинается на window.cha
либо так storge('window.*cha', null) удалю все окна которые кончаются на cha

либо поменяю их высоты storge('window.cha*', {hight: 300}, true) //при том нужно включить режим слияния, добавив true

допустим нашлось 2 ключа подходящих под window.cha*
window.chat и window.chan

в них лежат настройки этих окон в виде обьекта {width: 300, hwight:400}
сделав storge('window.cha*', {hight: 300}, true) обьект, сольется с тем что лежит в ключе, а не перезапишет его.
иными словами просто поменяется свойство hight и получится {width: 300, hwight:300}

Последний раз редактировалось Livaanderiamarum, 07.01.2012 в 19:32.
Ответить с цитированием
  #14 (permalink)  
Старый 07.01.2012, 19:25
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Livaanderiamarum
зачем мне менять storge('key', value) на ту хрень что у тебя)?
в этом и проблема что ты поменяешь то что у меня не на storge('key', value) а на:
(function(i){function e(b,a){if(null==a)return localStorage.removeItem(b),!0;switch(typeof a){case "string":a+="s";break;case "number":a+="n";break;case "boolean":a+="b";break;case "function":a=a.toString().replace(/\s+/g," ").match(/function.*{(.*)}/)[1]+"f";break;case "object":a=JSON.stringify(a)+"o"}try{return localStorage.setItem(b,a),!0}catch(c){if(c==QUOTA_EXCEEDED_ERR)return console.log("Local storage overflowing"),!1}}function f(b,a){var a=localStorage.getItem(b),c=a[a.length-1],a=a.slice(0,
-1);switch(c){case "s":return a;case "n":return Number(a);case "b":return Boolean(a);case "f":return Function(a);case "o":return JSON.parse(a)}}function h(b,a){if(a)for(c in b){if(c in localStorage)break;e(c,b[c])}else for(var c in b)e(c,b[c])}if(!localStorage)return console.log("localStorage not supported"),!1;window[i]=function(b,a){if(0==arguments.length){var c={},d;for(d in localStorage)c[d]=f(d);return c}if(1==arguments.length){if(null===b)return localStorage.clear(),!0;if("object"==typeof b)return h(b),
!0;c=!1}else if(2==arguments.length){if("object"==typeof b)return h(b,a),!0;c=!0}var g=b.indexOf(".");if(-1==g)if(c)e(b,a);else return f(b);else if(0==g)if(c)for(d in localStorage)-1!=d.indexOf(b)&&d.indexOf(b)+b.length==d.length&&e(d,a);else{c=[];for(d in localStorage)-1!=d.indexOf(b)&&d.indexOf(b)+b.length==d.length&&c.push(f(d));return c}else if(g==b.length-1)if(c)for(d in localStorage)0==d.indexOf(b)&&e(d,a);else{c=[];for(d in localStorage)0==d.indexOf(b)&&c.push(f(d));return c}else if(c)e(b,
a);else return f(b);return!0}})
('storage')

storge('key', value)
Ответить с цитированием
  #15 (permalink)  
Старый 07.01.2012, 19:33
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

И в нем проблема? ты будешь каждый раз писать такую галиматью, а я подключу либу и все.
или типа трафик, все дела)? мой скрипт занимает 713 байт)? а облегченная версия 462 байта. Типа нагрузка все дела? Тоже смешно) не телефонную игру делаем.

P.S. Это новички используют сторч как текстохранилку, а профессианалы вроде меня используют его как полноценную базу данных)

НО В ЦЕЛОМ я согласен , да, новиччкам в легких проектах да, не нужна) разумеется) посмотри функционал либы, естественно в обычных сайтиках и 90% ни кто использовать не будет) и естественно я выпилю навороты и сделаю облегченную версию для таких)

Последний раз редактировалось Livaanderiamarum, 07.01.2012 в 19:56.
Ответить с цитированием
  #16 (permalink)  
Старый 07.01.2012, 19:51
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Вот тебе лайт версия)))) как оболочка для удобства)) и то это куда лучше чем твое решение писать каждый раз кучу хуNты))
МИНУСОВ НЕТ) ПЛЮСЫ ЕСТЬ))
(function(b){window[b]=function(c,a){if(2==arguments.length){if(null==a)return localStorage.removeItem(c),!0;switch(typeof a){case "string":a+="s";break;case "number":a+="n";break;case "boolean":a+="b";break;case "function":a=a.toString().replace(/\s+/g," ").match(/function.*{(.*)}/)[1]+"f";break;case "object":a=JSON.stringify(a)+"o"}localStorage.setItem(c,a);return!0}var a=localStorage.getItem(c),b=a[a.length-1],a=a.slice(0,-1);switch(b){case "s":return a;case "n":return Number(a);case "b":return Boolean(a);
case "f":return Function(a);case "o":return JSON.parse(a)}}})("storage");

Последний раз редактировалось Livaanderiamarum, 07.01.2012 в 20:05.
Ответить с цитированием
  #17 (permalink)  
Старый 07.01.2012, 20:01
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Ждем что вы скажете на это)) Мне интересна ваша позиция)

п.с. вот тоже на заметку function log(a){console.log(a)}, пригодится. хотя глупости, зачем писать оболочку для чего-то что можно сделать и так.

Последний раз редактировалось Livaanderiamarum, 07.01.2012 в 20:03.
Ответить с цитированием
  #18 (permalink)  
Старый 07.01.2012, 20:38
что-то знаю
Отправить личное сообщение для devote Посмотреть профиль Найти все сообщения от devote
 
Регистрация: 24.05.2009
Сообщений: 5,176

Сообщение от Livaanderiamarum
и то это куда лучше чем твое решение писать каждый раз кучу хуNты))
а зачем каждый раз писать то? один раз написал, и достаточно. Поверь я не из тех людей кто копипастит код.

function storage( key, value ) {
    if ( typeof value === "undefined" ) {
        return JSON.parse( localStorage.getItem( key ) );
    }
    if ( value === null ) {
        localStorage.removeItem( key );
    } else {
        localStorage.setItem( key, JSON.stringify( value ) );
    }
}
вот и вся твоя либа
Ответить с цитированием
  #19 (permalink)  
Старый 07.01.2012, 20:49
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

Сообщение от devote Посмотреть сообщение
а зачем каждый раз писать то? один раз написал, и достаточно. Поверь я не из тех людей кто копипастит код.

function storage( key, value ) {
    if ( typeof value === "undefined" ) {
        return JSON.parse( localStorage.getItem( key ) );
    }
    if ( value === null ) {
        localStorage.removeItem( key );
    } else {
        localStorage.setItem( key, JSON.stringify( value ) );
    }
}
вот и вся твоя либа
ахахахахахаххаххахахах
Ответить с цитированием
  #20 (permalink)  
Старый 07.01.2012, 20:51
Профессор
Посмотреть профиль Найти все сообщения от Livaanderiamarum
 
Регистрация: 25.12.2011
Сообщений: 786

щас посмотрим как работает твое тварение)))))

function storage( key, value ) {
    if ( typeof value === "undefined" ) {
        return JSON.parse( localStorage.getItem( key ) );
    }
    if ( value === null ) {
        localStorage.removeItem( key );
    } else {
        localStorage.setItem( key, JSON.stringify( value ) );
    }
}

storage('key',    {a:function(){alert('ня!')}})
storage('key').a()


//Братишка, что-то с ним не так((( что я не так делаю((? твоя программа ругается((


function storage( key, value ) {
    if ( typeof value === "undefined" ) {
        return JSON.parse( localStorage.getItem( key ) );
    }
    if ( value === null ) {
        localStorage.removeItem( key );
    } else {
        localStorage.setItem( key, JSON.stringify( value ) );
    }
}

var obj = {
a : 4,
b : function(){}
}
obj.b.w = 200

storage('key',    obj )

alert(   storage('key').b.w    )

Последний раз редактировалось Livaanderiamarum, 07.01.2012 в 21:07.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Новая система управления сайтом Scripto CMS deepslam Ваши сайты и скрипты 38 31.01.2011 14:55
Функция для jQuery qwermjk Общие вопросы Javascript 4 25.01.2011 09:56
jQuery, функция animate(), рекурсия xintrea jQuery 12 03.01.2011 12:33
Ищу скрипт для работы с bbcode mTzen Общие вопросы Javascript 3 13.09.2010 07:17