いままでは
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です。
今回は以上です。