2017-01-27 20 views
0

私はlocalstorageに格納されるオブジェクトに関数を割り当てる方法が必要です。私は以下のコードをしようと試みたが、私は得る:関数を格納オブジェクトに割り当てる方法は?

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(); 
+0

localstorageは文字列を格納することができます[オブジェクトをHTML5 localStorageに格納する](http://stackoverflow.com/questions/2010892/storing-objects-in-html5-localstorage) – Justinas

+0

@Justinasはいわかりましたlocalstorageに格納されるオブジェクトへの関数? – xRobot

答えて

3

I need a way to assign functions to object that then will be stored in the localstorage.

ウェブストレージのみ店舗文字列:「キャッチされない例外TypeError mydog.woofは関数ではありません」。

あなたの最善の策は、別の方法で問題を解決することです。おそらく、スクリプトコード内のオブジェクト内の関数を検索するために使用するキーを保存することです。

それとも、あなたの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を経由して、それを再構築、関数の文字列バージョンを保存することもできますが、私は本当にないでしょう。コードではなくデータにストレージを使用します。

関連する問題