JavaScriptでオブジェクトのメソッドを実行時に書き換えること自体は簡単ですが、
オーバーライドメソッド内でもとのメソッドを呼び出したい場合はどうすればよいのでしょうか。
このサンプルコードでは、クロージャーを利用することで名前空間を汚染することなくオリジナルのメソッドを保持し、オーバーライド1を実現しています。
var anObject = {
state: "hoge",
getState: function () { return this.state; }
};
anObject.getState(); // "hoge"
anObject.getState = (function () {
var context = anObject;
var original = anObject.getState;
return function () { return "state: " + original.call(context); }; // override-method
})();
anObject.getState(); // "state: hoge"
(ちなみに黒魔術なので、過度な利用は控えたほうが良いかと思います。。)
1. JSにはクラスの概念が無いですが、「オブジェクトのメソッドを書き換える」ぐらいの意味で使っています