これは Javascript の醜いビットです。回避策を見つけるとよいでしょう。
Javascript にはクラスがありません。これは良いことです。しかし、オブジェクト間のフォールバックをかなり醜い方法で実装しています。基本的な構造は、プロパティが見つからない場合に別のオブジェクトにフォールバックする 1 つのオブジェクトを持つ必要があります。
したがって、a
フォールバックしたい場合はb
、次のようにします。
a = {sun:1};
b = {dock:2};
a.__fallback__ = b;
それから
a.dock == 2;
ただし、Javascript は代わりにnew
演算子 andを提供しますprototypes
。そのため、はるかにエレガントではありません。
function A(sun) {
this.sun = sun;
};
A.prototype.dock = 2;
a = new A(1);
a.dock == 2;
しかし、優雅さは別として、これは厳密には強力ではありません。これは、A で作成されたものはすべて同じフォールバック オブジェクトを取得することを意味するためです。
私がやりたいことは、Javascript をこの人為的な制限から解放し、個々のオブジェクトに別の個々のオブジェクトをフォールバックとして与える能力を持つことです。そうすれば、理にかなっている場合は現在の動作を維持できますが、それが理にかなっている場合はオブジェクト レベルの継承を使用できます。
私の最初のアプローチは、ダミーのコンストラクター関数を作成することです。
function setFallback(from_obj, to_obj) {
from_obj.constructor = function () {};
from_obj.constructor.prototype = to_obj;
}
a = {sun:1};
b = {dock:2};
setFallback(a, b);
しかし残念ながら:
a.dock == undefined;
これが機能しない理由、または実装の解決策はありsetFallback
ますか?
(これがプラットフォームに依存する場合に備えて、node.js経由でV8で実行しています)
編集:
これに対する部分的な解決策を以下に投稿しました。これは V8 の場合に機能しますが、一般的ではありません。より一般的な解決策をいただければ幸いです。