2010-11-27 3 views
0

Я пишу обложку localStorage, чтобы упростить вставку и извлечение данных, когда это необходимо для создания более надежных запросов.Проверка типов объектов в моем скрипте?

Мой сценарий здесь: https://github.com/OscarGodson/storageLocker

Пользователь моего сценария спросил меня, как он мог бы спасти Дата и я сказал ему правильную процедуру (сохранить new Date().getTime() в формате JSON и оживить его с чем-то вроде new Date(json.time), но он пытался сделать hisStorage.save({'the_date':new Date()}), но к его удивлению, когда он пошел, чтобы получить данные, которые были бы искажены.

Итак, мой вопрос: как я могу улавливать вставки вроде этого и других объектов (возможно, событий?), конвертировать их для пользователей, которые будут храниться в JSON, а также правильно восстановлены? Я работал над этим весь день, и я не могу понять, как проверить определенные типы объектов и соответственно конвертировать их через какой-либо коммутатор.

Сохранить и восстановить часть моего сценария выглядит следующим образом:

Сохранение данных:

storageLocker.prototype.save = function(value){ 
    var json = JSON.parse(localStorage.getItem(this.catalog)); 
    if(json == null){json = {};} 
    for(var key in value){ 
     if(value.hasOwnProperty(key)){ 
      json[key] = value[key]; 
     } 
    } 
    localStorage.setItem(this.catalog,JSON.stringify(json)); 
    return this; 
} 

Получение данных:

storageLocker.prototype.get = function(value){ 
    json = JSON.parse(localStorage.getItem(this.catalog)); 
    if(json == null){json = {};} 
    if(value){ 
     if(typeof json[value] !== 'undefined'){ 
      return json[value]; 
     } 
     else{ 
      //Makes it so you can check with myStorage.get('thisWontExist').length 
      //and it will return 0 and typeof will return object. 
      return new Object(''); 
     } 
    } 
    else{ 
     return json; 
    } 
}; 
+0

http://stackoverflow.com/questions/332422/how-do-get-the-name-of-an-objects-type-in-javascript – Stephen 2010-11-27 22:38:44

ответ

2

Используйте оператор instanceof для проверки является ли объект экземпляром Date :

if (value[key] instanceof Date) { 
    //serialize in some way 
    ... 
}else{ 
    json[key] = value[key]; 
} 

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

+0

Да, это также верно. Я думаю о каком-то пользовательском хранилище дат вроде (в localStorage) `sLDate (123467890)` или что-то в этом роде. Если у вас есть другие предложения, дайте мне знать. Большое спасибо, я попробую. Предыдущий человек, который пытался мне помочь, сказал, что это невозможно, так как вы не можете хранить объекты в JSON ... так что я думал, что снова спрошу :) – 2010-11-27 22:57:38

Смежные вопросы