クラスのメソッドをオーバーライドしたい場合
http://jsdo.it/qa/69
by FiNGAHOLiC
HTML
<script src="https://getfirebug.com/firebug-lite-debug.js"></script>
JavaScript
/*!
*
* クラスのメソッドをオーバーライドしたい場合
*
*/
// スーパークラスの定義
var SuperClass = function(){};
SuperClass.prototype.doSomething = function(){
console.log('I\'m SuperClass method');
};
// サブクラスの定義
var SubClass = function(){
// スーパークラスのコンストラクタ関数の呼び出し
SubClass.apply(this, arguments);
};
// 継承
SubClass.prototype = new SuperClass();
// オーバーライド
SubClass.prototype.doSomething = function(){
console.log('I\'m SubClass method');
};
/*!
*
* サブクラスのメソッドからスーパークラスのメソッドを呼び出す方法
*
*/
// スーパークラスが既知の場合
SubClass.prototype.doSomething = function(){
var _super = SuperClass.prototype;
_super.doSomething.apply(this, arguments);
};
// スーパークラスが未知の場合1
// __proto__を用いる方法
SubClass.prototype.doSomething = function(){
var _super = SubClass.prototype.__proto__;
_super.doSomething.apply(this, arguments);
};
// スーパークラスが未知の場合2
// ES5のgetPrototypeOf()を用いる方法
SubClass.prototype.doSomething = function(){
var _super = Object.getPrototypeOf(SubClass.prototype);
_super.doSomething.apply(this, arguments);
};
// スーパークラスが未知の場合3
// constructorを用いる方法
SubClass.prototype.doSomething = function(){
var _super = SubClass.prototype.constructor.prototype;
_super.doSomething.apply(this, arguments);
};