Photo by spud murphy
先ほどの記事のコードにミスがあり、継承を行うと、親クラスも書き換えてしまうバグがありました。コメントやTwitterで報告いただいた方々ありがとうございます。
あの後、調べて見れると、あまりスマートに継承を実現する方法は無いみたいですが、ユーザが作ったクラス(StringなどのAtomic型を除く)は下記のコードで継承が行えます。
特に、Array型を継承するのは、無理なようです。[]を上書きできないので、どうしようも無いみたいです。残念。
<body> <div id="result"></div> <script> var puts = function(str) { var el = document.getElementById('result'); el.innerHTML = el.innerHTML + str + "<br/>"; } // クラスを継承する extendClass = function(subClass, baseClass) { var inheritance = function() { }; inheritance.prototype = baseClass.prototype; subClass.prototype = new inheritance(); subClass.prototype.constructor = subClass; subClass.baseConstructor = baseClass; subClass.superClass = baseClass.prototype; } var Parent = function(n) { this.n = n; } Parent.prototype.display1 = function() { puts("parent display1:"+this.n); } Parent.prototype.display2 = function() { puts("parent display2:"+this.n*2); } var Child = function(n) { Child.baseConstructor.apply(this, [n*2]); } extendClass(Child, Parent); Child.prototype.display2 = function() { puts("child display2(over):"+this.n*2); } Child.prototype.display3 = function() { puts("child display3:"+this.n); } var child = new Child(1); child.display1(); child.display2(); child.display3(); puts("<hr/>"); var parent = new Parent(1); parent.display1(); parent.display2(); </script></body> </html>
参考