Хранить функцию в хранилище данных IndexedDb
Возможно ли каким-либо образом сохранить функцию в хранилище данных IndexedDB? Я провел некоторый поиск и ничего не нашел по типам данных, которые поддерживает IndexedDB. Я попытался просто добавить функцию и экземпляр функции в хранилище объектов следующим образом, но это не сработало.
var myclass = function () {
self = this;
self.name = 'Sam';
self.hello = function () {
console.log('Hello ' + self.name);
};
}
var transaction = db.transaction(['codeobject'], 'readwrite');
var store = transaction.objectStore('codeobject');
var request = store.put({ 'classname': 'someclass', 'object': myclass });
И я пытался.
var request = store.put({ 'classname': someclass', 'object': new myclass() });
Мне бы очень хотелось сохранить класс в object db. Даже если бы мне пришлось хранить его в виде какого-то типа большого двоичного объекта, а затем сериализовать его обратно в функцию на своем компьютере. выход.
Спасибо
2 ответа:
Если я правильно понял ваш вопрос, то вы хотите сериализовать весь объект, включая функции?
Это можно сделать, нужно только сделать возможным сериализацию функций. Дополнительную информацию об этом смотрите в разделе my blogpost.
function serialize(key, value) { if (typeof value === 'function') { return value.toString(); } return value; } function deserialize(key, value) { if (value && typeof value === "string" && value.substr(0, 8) == "function") { var startBody = value.indexOf('{') + 1; var endBody = value.lastIndexOf('}'); var startArgs = value.indexOf('(') + 1; var endArgs = value.indexOf(')'); return new Function(value.substring(startArgs, endArgs), value.substring(startBody, endBody)); } return value; } var jsonObj = { func: function(){ return ""; } } // Turns an object into a json string including functions var objectstring = JSON.stringify(jsonObj, serialize); // Turns an object string in JSON into an object including functions. var object = JSON.parse(objectstring , deserialize);
Полученную строку objectstring можно сохранить в базе данных indexeddb.