24
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

JavaScript で動的オーバーライド時にもとのメソッドを呼び出す方法

Posted at

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にはクラスの概念が無いですが、「オブジェクトのメソッドを書き換える」ぐらいの意味で使っています

24
21
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?