如何为存储对象分配功能?

时间:2017-01-27 08:06:03

标签: javascript

我需要一种方法将函数分配给对象,然后将其存储在localstorage中。我尝试了下面的代码,但我得到了:"未捕获的TypeError:mydog.woof不是函数"

Storage.prototype.setObject = function(key, value) {
    this.setItem(key, JSON.stringify(value));
}

Storage.prototype.getObject = function(key) {
    var value = this.getItem(key);
    return value && JSON.parse(value);
}


var Dog = function(name) {
  this.name = name
}

Dog.prototype.woof = function woof() {
  console.log('woof woof, I am ' + this.name);
}

// Instantinate your objects with `new` keyword
var dog = new Dog('Lovely')
dog.woof()

//Store in the localstorage
localStorage.setObject('mydog', dog); 

//Get from the localstorage
var mydog = localStorage.getObject('mydog');
mydog.woof();

1 个答案:

答案 0 :(得分:3)

  

我需要一种方法将函数分配给对象,然后将其存储在localstorage中。

网络存储存储字符串。

最好的办法是以另一种方式解决问题,也许存储一个用于在脚本代码中的对象中查找函数的密钥。

或者,根据您的Dog示例,通常我在这些情况下执行的操作与Dog(甚至是Dog构造函数)相关联的函数接受普通对象版本一只狗并创建一个用该数据初始化的Dog版本。例如,粗略地说:

Dog.fromPlainObject = function(plain) {
    var d = new Dog();
    Object.keys(plain).forEach(function(key) {
        d[key] = plain[key];
    });
    return d;
};

...或该主题的十几种变体中的任何一种。

可以存储该函数的字符串版本,然后通过eval重新构建它,但我真的不会。使用存储来存储数据,而不是代码。