最近頭に浮かんだ問題を解決しようとしています。php (__get、__set) のような、動的な getter と setter を javascript で使用することを希望し、その方法を知っているとしましょう。しかし、javascript にはすべてをキャッチするプロパティがないため、可能なキーのリストを提供し、反復してそれらのみにゲッターとセッターを追加するしかありません。
しかし、問題はそれほど解決されていません。try
したがって、私の頭に浮かんだ次のアプローチは、とで厄介なハックを使用することでしたcatch
。そのため、オブジェクトで名前が定義されていないときはいつでも、をcatch
ゲッターとして使用し(少なくとも)、コードを再開します。行う。しかし、ここから、次のような用途で 2 番目の問題が発生しました。
console.log(g.someundefinedproperty);
結果は、例外がスローされることなく、 console.log
showingへの呼び出しになります。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');
}
});
残念ながら、undefined
window のプロパティは ですconfigurable : false
。試行された他のハックは、および内部プロパティwindow
を除くオブジェクトのクローン作成でした。そして、新しいオブジェクトで新しいオブジェクトを定義します(皮肉なことに注意してください) 。undefined
window
undefined
window = 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
または構文、私はあなたに話すか、永遠に黙っていることを懇願します:)。