Web ブラウザと Node.js バックエンドで使用したい Javascript ライブラリがあります。ライブラリには、メソッドが次のように定義された複数のオブジェクトがあります。
function foo() {
this.bar = 200;
this.someMethod = function(baz) {
return this.bar + baz;
};
}
var x = new foo();
そして、次のようにしてクライアントまたは Node.js サーバーで使用できます。
x.someMethod(5);
=> (returns 205)
これでJSON.stringify
、オブジェクトを作成すると、メソッドなしで表示されます。
var string = JSON.stringify(x);
=> {"bar":200}
つまり、サーバーで JSON を解凍して同じメソッドを使用することはできません。
var parsed = JSON.parse(string);
document.write(parsed.someMethod(5));
=> (doesn't do anything. the methods are gone!)
クラス ベースのシステムでは、コピー コンストラクターを使用するだけです。JSON からオブジェクトを再構築するもの。
function foo_copy_constructor(parsed_json) {
f = new foo();
f.bar = parsed_json.bar;
return f;
}
var z = foo_copy_constructor(parsed);
z.someMethod(5);
=> (returns 205 like it should)
( jsfiddle: http://jsfiddle.net/7FdDe/ )
基本的に、これよりも良い方法はありますか?
私のオブジェクトの多くには、独自のメソッドで作成した他のオブジェクトのインスタンスが含まれています。クライアントとサーバーの両方が同じライブラリとオブジェクト定義を使用するため、オブジェクトごとにコンストラクターを作成するのは面倒なようです。JavaScript がプロトタイプに基づいていることは知っていますが、JavaScript を使い始めたばかりで Python やクラスベースの言語に慣れているため、よくわかりません。
助けてくれてありがとう!