みかづきブログ その3

3ヶ月つづけてみました。

prototypeチェーンをつなげる

いままでは

function Super() {
    alert("hey");
}

Super.prototype.say = function() {
    alert("jump");
}

function Sub() {}

とあったときに、Subのインスタンスからsayメソッドを叩きたかったら、

Sub.prototype = new Super();
Sub.prototype.constructor = Sub;

という感じで継承していました。

が。

これだとメソッドチェーンをつなぐ時にSuperのコンストラクタが実行され、上記例だとアラートが表示されてしまいます。


解決法

ECMAScript5で定義されたObject.createをつかえば解決します。

Sub.prototype = Object.create(Super.prototype);
Sub.prototype.constructor = Sub;

DEMO


もしくは、Superのprototypeを一旦空のコンストラクタに移動させてからnewしてもOKです。


こちらの方法であれば、Object.createがつかえないレガシーなブラウザでもOKです。



今回は以上です。