次の例は、Object.prototype.watch
メソッドを使ってプロパティが変更されたときに呼び出した関数オブジェクトをチェックして、next
メソッド経由以外からの変更をキャンセルしている。
|
watch
メソッドに指定したコールバック関数の戻り値が、プロパティにセットされる値になる。呼び出し元(arguments.callee.caller
)がnext
メソッド以外なら、元の値(oldV)が返されるためプロパティの値に変化はなく、結果nextメソッド経由以外は受け付けないわけだ。これで一応プライベートっぽいプロパティを作れるが、パフォーマンス的にクロージャを使ったほうが良いケースが多くて今一。