- 2010-02-15 (Mon) 19:44
- Javascript
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>
参考
Related posts
masuidrive(増井 雄一郎)
PukiWikiなどのオープンソース活動を経て、2005年からRuby on Railsに的を絞り、WEB2.0社 PingKingやニフティ アバウトミーの開発に関わる。これまでのフリー活動から転身し、2007年は1年だけ会社員として働いた後、起業のため渡米。2008年4月にBig Canvas Inc.設立。現在、米ベルビュー在住。
Comments:0
Trackbacks:1
- Trackback URL for this entry
- http://blog.masuidrive.jp/index.php/2010/02/15/inherited-javascript/trackback/
- Listed below are links to weblogs that reference
- [訂正版] Javascriptでクラスを継承する from @masuidrive blog
- pingback from とっても! ちゅどん(雑記帳) » Blog Archive » [訂正版] Javascriptでクラスを継承する – @masuidrive blog 10-02-16 (Tue) 2:44
-
[...] [訂正版] Javascriptでクラスを継承する – @masuidrive blog [...]