最近頭に浮かんだ問題を解決しようとしています。php (__get、__set) のような、動的な getter と setter を javascript で使用することを希望し、その方法を知っているとしましょう。しかし、javascript にはすべてをキャッチするプロパティがないため、可能なキーのリストを提供し、反復してそれらのみにゲッターとセッターを追加するしかありません。
しかし、問題はそれほど解決されていません。tryしたがって、私の頭に浮かんだ次のアプローチは、とで厄介なハックを使用することでしたcatch。そのため、オブジェクトで名前が定義されていないときはいつでも、をcatchゲッターとして使用し(少なくとも)、コードを再開します。行う。しかし、ここから、次のような用途で 2 番目の問題が発生しました。
console.log(g.someundefinedproperty);
結果は、例外がスローされることなく、 console.logshowingへの呼び出しになります。undefined元のゲッターとセッターを使用するとどうなるでしょうか。window.undefined結局のところ、失敗して単語や何かのスペルを間違えるたびに呼び出す必要があります。
だから私は試しました
Object.defineProperty(window, 'undefined', {
get : function ()
{
// functional code, including getting the caller and figuring out
// where we are, and what we have to do... easy :D
console.log('works');
},
set : function ()
{
// some couple more fine hacks here
console.log('this too');
}
});
残念ながら、undefinedwindow のプロパティは ですconfigurable : false。試行された他のハックは、および内部プロパティwindowを除くオブジェクトのクローン作成でした。そして、新しいオブジェクトで新しいオブジェクトを定義します(皮肉なことに注意してください) 。undefinedwindowundefinedwindow = mybetterwindow
これにより問題が発生しなかったので、私の希望は高かったのですが、システムはwindow設計上上書きできないため、やはり失敗しました。window.prototype私はそれが独自のゲッターを持っていると推測しましたWindow.prototype。
この実験の最後のステップとして、undefinedこのプロトタイプのヒット ランを再定義しました。役に立たず、何も変更されませんでした... を作成しようとしましたnew Window()がWindow、コンストラクターではありません。失敗しました!
アイデアが尽きたので、ここで助けを求めるこの嘆願を書いていることに気づきました。動的なゲッターとセッターの問題 ( ) を解決する方法があれば、the existencial problem of life, universe and everything else私がオブジェクトを使用する方法とはまったく変更されません (ボーナスとして、 にはありませneed to breakんhole)fabric of time and spaceまたは構文、私はあなたに話すか、永遠に黙っていることを懇願します:)。