Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   localstorge ФУНКЦИЯ ДЛЯ РАБОТЫ!!!!! (https://javascript.ru/forum/misc/24588-localstorge-funkciya-dlya-raboty.html)

Livaanderiamarum 06.01.2012 19:58

localstorge ФУНКЦИЯ ДЛЯ РАБОТЫ!!!!!
 
(function(i){function e(a,c){if(null===c)return localStorage.removeItem(a),!0;c="function"==typeof c?"-"+c.toString().replace(/\s+/g," ").match(/function.*{(.*)}/)[1]:JSON.stringify(c);try{return localStorage.setItem(a,c),!0}catch(b){if(b==QUOTA_EXCEEDED_ERR)return console.log("Local storage overflowing"),!1}}function f(a,c){c=localStorage.getItem(a);return"-"===c[0]?(c=c.slice(1),Function(c)):JSON.parse(c)}function h(a,c){if(c)for(b in a){if(b in localStorage)break;e(b,a[b])}else for(var b in a)e(b,
a[b])}if(!localStorage)return console.log("localStorage not supported"),!1;window[i]=function(a,c){if(0==arguments.length){var b={},d;for(d in localStorage)b[d]=f(d);return b}if(1==arguments.length){if(null===a)return localStorage.clear(),!0;if("object"==typeof a)return h(a),!0;b=!1}else if(2==arguments.length){if("object"==typeof a)return h(a,c),!0;b=!0}var g=a.indexOf(".");if(-1==g)if(b)e(a,c);else return f(a);else if(0==g)if(b)for(d in localStorage)-1!=d.indexOf(a)&&d.indexOf(a)+a.length==d.length&&
e(d,c);else{b=[];for(d in localStorage)-1!=d.indexOf(a)&&d.indexOf(a)+a.length==d.length&&b.push(f(d));return b}else if(g==a.length-1)if(b)for(d in localStorage)0==d.indexOf(a)&&e(d,c);else{b=[];for(d in localStorage)0==d.indexOf(a)&&b.push(f(d));return b}else if(b)e(a,c);else return f(a);return!0}})
('storge') //сюда вводим имя функции которое нам приятнее юзать

/*
*  storge('keyName', value)  установить значение
*  storge('keyName')  получить значение
*  storge('keyName', null) удалить ключ
*  storge(null) очистить хранилище
*/

storge('keyName', function(){alert('няяяя!')})
var func = storge('keyName')
func()//няяяя!




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

ИСПОЛЬЗОВАНИЕ:

storge('keyName', value) // установить ключ

storge('keyName') // получить значение

storge('keyName', null) // удалить ключ

storge(null) // очистить хранилище

var dump = storge() // получить дамп хранилища

storge(dump) //слить обьект с хранилещем с заменой ключей которые уже имеются

storge(dump, true) //слить обьект с хранилещем без замены уже существующих значений, щадящий режим включен



ПРОСТРАНСТВО ИМЕН:

storge('name', 200) //установить ключ name в 200
storge('name') //получить ключ name

storge('name.q', 40) //установить name.q в 40
storge('name.w', 30) //установить name.w в 30
//при этом name по прежнему жива и равна 200 потому что её мы не трогали

storge('name.q') //получить значение name.q, все как обычно


теперь интереснее
storge('name.') //получить массив ПОДключей name, то есть массив [name.q, name.w] НЕ включая саму name

еще интересней
storge('name.', 'ня') //установить все ПОДключи name в 'ня'

совсем интересно
storge('name.', null) //удалить все ПОДключи name, при том сама name останется нетронутой

god mode
storge('.qq', null) //удалить все ПОДключи с именем qq, родители их останутся не тронутыми

Octane 06.01.2012 20:08

Хотя бы флаг isLocalStorageAvailable добавь, для проверки доступности localStorage, чтобы в будущих скриптах на основе твоей функции, учитывалось отсутствие поддержки IE7

Livaanderiamarum 07.01.2012 05:33

версия 1.1 добавлена поддержка хранения функций
версия 1.5 добавлено пространство имен
версия 1.6 добавлена поддержка boolean
версия 1.7 если передать один аргумент {объект}, то он сливается с хранилищем перезаписывая
версия 1.8 без параметров возвращается объект дамп хранилища.
версия 1.9 добавлен щадящий режим слияния обьекта с хранилищем
версия 2.0 проверка на переполнение хранилища
версия 2.1 обфуксация и оптимизация кода

// в разработке
версия 2.2 поддержка эмуляции хранилища в старых браузерах через cookies

Gvozd 07.01.2012 06:16

Цитата:

Сообщение от Livaanderiamarum
версия 2.1 обфуксация

зачем?

Livaanderiamarum 07.01.2012 14:57

Цитата:

Сообщение от Gvozd (Сообщение 148531)
зачем?

Чтобы трояна заныкать)

Livaanderiamarum 07.01.2012 18:08

Какие вещи еще зафигачить народ)?

Может сделать типа селекторов)?

devote 07.01.2012 18:12

чето не допиливаю... а зачем это вообще? в чем сложность проверить наличие localStorage обычным детовским путем:
if ( window.localStorage ) {}
хуже твоего? Или так же работать с ним... Там же заумных манипуляций вроде нет. Все легко и просто сделано изначально. А насчет куки это не очсобо хороший вариант, ибо много не сохранишь, есть ограничение на количество хранения данных в куках.

Livaanderiamarum 07.01.2012 18:21

Цитата:

Сообщение от devote (Сообщение 148631)
чето не допиливаю... а зачем это вообще?

1) для удобства работы
2) для быстроты работы
3) для простоты работы

как и любая библиотека собственно

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

devote 07.01.2012 18:25

подрубать целый скрипт лишь ради того что бы всунуть что-то в storage хм... не вижу смысла... хотя может вам оно и удобнее. По мне так проще и удобнее юзать встроенные возможности в браузер, а библы нужно писать те что реально всегда нужны. Что-то типа сложных действий, которые бразуер делать сам не умеет. Но писать библу(обертку) на localStorage с которым и без библы(обертки) работать легко, не вижу смысла.

Livaanderiamarum 07.01.2012 18:41

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

потом засунь число и получи его и выведи его тип алертом.
потом засунь строку '93444' и получи её и выведи тип алертом.
посмотрим как справишься...

Livaanderiamarum 07.01.2012 18:46

(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) // почистим


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

devote 07.01.2012 19:09

Цитата:

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

потом засунь число и получи его и выведи его тип алертом.
потом засунь строку '93444' и получи её и выведи тип алертом.
посмотрим как справишься...

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

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

Livaanderiamarum 07.01.2012 19:19

Цитата:

Сообщение от devote (Сообщение 148653)
У меня встречный вопрос, а зачем мне это делать? Насколько мне известно 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}

devote 07.01.2012 19:25

Цитата:

Сообщение от 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)

Livaanderiamarum 07.01.2012 19:33

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

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

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

Livaanderiamarum 07.01.2012 19:51

Вот тебе лайт версия)))) как оболочка для удобства)) и то это куда лучше чем твое решение писать каждый раз кучу ху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:01

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

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

devote 07.01.2012 20:38

Цитата:

Сообщение от 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 ) );
    }
}
вот и вся твоя либа

Livaanderiamarum 07.01.2012 20:49

Цитата:

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

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 ) );
    }
}
вот и вся твоя либа

ахахахахахаххаххахахах

Livaanderiamarum 07.01.2012 20:51

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

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    )

devote 07.01.2012 20:52

ну а если уж очень любишь минимизацию, то можно и так:
function storage( key, value ) {
    return JSON.parse( localStorage[ typeof value === "undefined" ? 'getItem' : value === null ? 'removeItem' : 'setItem' ]( key, JSON.stringify( value ) ) );
}
Правда парсер JSON возможно будет не доволен, после выполнения например функции removeItem или setItem но можно запихать в try catch это все.

devote 07.01.2012 20:53

Цитата:

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

ну понятно дело что функции она не будет совать в хранилище, но вот вопрос а нахуя их туда совать?

Livaanderiamarum 07.01.2012 21:10

Цитата:

Сообщение от devote (Сообщение 148688)
ну понятно дело что функции она не будет совать в хранилище, но вот вопрос а нахуя их туда совать?

Я хочу положить обьект чата в хранилеще чтобы потом его больше не грузить чат у меня это целое прложение)) сайт может работать как с чатом так и без) человек закрывет чат и он попадает в хранилеще) человек открывает чат и чат достается из хранилеща при том мой сервер не дергается)

Livaanderiamarum 07.01.2012 21:14

Цитата:

Сообщение от devote (Сообщение 148686)
ну а если уж очень любишь минимизацию, то можно и так:
function storage( key, value ) {
    return JSON.parse( localStorage[ typeof value === "undefined" ? 'getItem' : value === null ? 'removeItem' : 'setItem' ]( key, JSON.stringify( value ) ) );
}
Правда парсер JSON возможно будет не доволен, после выполнения например функции removeItem или setItem но можно запихать в try catch это все.

Кстати ты мне подал одну идею о том как Сделать типизацию) JSON же есть) он сам все определяет) я его не на всю катушку использовал)

devote 07.01.2012 21:17

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

Livaanderiamarum 07.01.2012 21:23

Цитата:

Сообщение от devote (Сообщение 148693)
а ну понятно, хотя это глупо совать функции в хранилище... функция может измениться. Ну то есть сменил ты версию своей функции, а чел зашел и юзает старую не совместимую вылетает ошибка... Поэтому такие вещи не хранят в хранилищах, особенно удаленных локальных у пользователя. Но а что по поводу того что у тебя, дык это единичный случай. Ибо сомневаюсь что кто-то будет хранить там функции...

Ну да, ты прав... А что на счет селекторов? Глупая затея?

devote 07.01.2012 21:23

Цитата:

Сообщение от Livaanderiamarum
А что на счет селекторов? Глупая затея?

не совсем понял о чем ты?

Livaanderiamarum 07.01.2012 21:29

Цитата:

Сообщение от devote (Сообщение 148696)
не совсем понял о чем ты?

Я про пространство имен, посмотри примеры использования в топике

devote 07.01.2012 21:33

Цитата:

Сообщение от Livaanderiamarum
Я про пространство имен, посмотри примеры использования в топике

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

Kolyaj 07.01.2012 21:51

Цитата:

Сообщение от devote
02	    if ( typeof value === "undefined" ) {
03	        return JSON.parse( localStorage.getItem( key ) );
04	    }

В таких случаях всегда проверяем arguments.length, а не typeof value. Может я хочу undefined положить?

devote 07.01.2012 22:00

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

Livaanderiamarum 07.01.2012 22:00

Цитата:

Сообщение от Kolyaj (Сообщение 148700)
В таких случаях всегда проверяем arguments.length, а не typeof value. Может я хочу undefined положить?

undefined удаляет ключ

Livaanderiamarum 07.01.2012 22:01

Народ, поможете написать 3 регулярки)? в последний раз прошу) с завтрашнего дня буду сам учить

melky 07.01.2012 22:03

Livaanderiamarum

(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}})
('storge') //сюда вводим имя функции которое нам приятнее юзать

*!*
storge('keyName', alert) /*native func*/
var func = storge('keyName')
func("Няяяяя")
*/!*
nuff said

Livaanderiamarum 07.01.2012 22:06

Цитата:

Сообщение от melky (Сообщение 148710)
nuff said

когда сам это сделаешь позвони)

Livaanderiamarum 07.01.2012 22:08

Нужно проверить:
ЕСТЬ ли точка?
В начале ли она?
В конце ли она?

для этого нужно писать 3 регулярки)?

melky 07.01.2012 22:12

Цитата:

Сообщение от Livaanderiamarum (Сообщение 148711)
когда сам это сделаешь позвони)

в твоём "супир" скрипте есть дыра. я тебе её указал. что не так?


Цитата:

Сообщение от Livaanderiamarum (Сообщение 148713)
Нужно проверить:
ЕСТЬ ли точка?
В начале ли она?
В конце ли она?

для этого нужно писать 3 регулярки)?

одну можно. поищи про "|"

Livaanderiamarum 07.01.2012 22:20

Цитата:

Сообщение от melky
в твоём "супир" скрипте есть дыра. я тебе её указал. что не так?

это не дыра)) ЗАДУМАНО ЧТО нативные методы нельзя сохранять
это фитча, Я так пожелал.) такова моя ВОЛЯ

а за суперскрипт спасибо)

devote 07.01.2012 22:32

Цитата:

Сообщение от Livaanderiamarum
когда сам это сделаешь позвони)

Цитата:

Сообщение от melky
в твоём "супир" скрипте есть дыра. я тебе её указал. что не так?

Для нативных функций это вообще отдельная история, хотя сохранить их можно при желании.. Но вот насчет кроссбраузерности сомневаюсь что выйдет. Что-то типа так:
function test( value ) {
    if ( value.toString().indexOf( '[native code]' ) > 0 ) {
        alert( "this is native object" );
        // и тут в JSON можно запихнуть инфу о названии функции и просто на получение выдавать соответственно саму функцию в браузере
    } else {
        alert( "this is custom object" );
    }
}

test( alert );
Работать правда будет не во всех браузерах, да и имя функции нужно выяснять как-то.

Livaanderiamarum 07.01.2012 22:41

Цитата:

Сообщение от devote (Сообщение 148722)
да и имя функции нужно выяснять как-то.

кстати да, как узнать на что ссылку присваивать доставаемому обьекту)?


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