メタデータのキーと値のペアを任意の JavaScript オブジェクトに追加したいと考えています。このメタデータは、メタデータを認識しないコードに影響を与えるべきではありません。つまり、たとえば
JSON.stringify(obj) === JSON.stringify(obj.WithMetaData('key', 'value'))
メタデータ対応コードは、キーでデータを取得できる必要があります。つまり、
obj.WithMetaData('key', 'value').GetMetaData('key') === 'value'
node.jsでそれを行う方法はありますか? もしそうなら、それはString
and evenのような組み込み型で動作しますか? (編集考えてみると、数字のような実際のプリミティブは気にしませんが、文字列インスタンスにそれがあるといいでしょう)。Number
いくつかの背景: 私がやろうとしているのは、オブジェクト自体を使用してオブジェクトから派生した値をキャッシュすることです。
- メタデータを認識しないコードに対して、メタデータが強化されたオブジェクトは、メタのない元のオブジェクトと同じように見えます
- 導出された値を必要とするコードは、すでにキャッシュされている場合、メタデータから取得できます
- キャッシュはオブジェクトと一緒にガベージコレクションを取得します
もう 1 つの方法は、ハッシュ テーブルをキャッシュとともにどこかに格納することですが、オブジェクトがいつガベージ コレクションされるかはわかりません。キャッシュがリークしないように、すべてのオブジェクト インスタンスを手動で処理する必要があります。
(ところで、clojure にはこの機能があります: http://clojure.org/metadata )