当前位置:  开发笔记 > 编程语言 > 正文

将函数存储在IndexedDb数据存储区中

如何解决《将函数存储在IndexedDb数据存储区中》经验,为你挑选了1个好方法。

是否可以以任何方式将函数存储在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() });

我真的想要在对象db中存储一个类.即使我必须将它存储为某种类型的blob,然后将其序列化为一个函数.

谢谢



1> Kristof Degr..:

如果我的问题正确,你想要做的是序列化整个对象,包括函数?

这是可能的,您只需要可以序列化函数.有关它的更多信息,请参阅我的博客文章.

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中.

推荐阅读
mobiledu2402852413
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有