Home > Javascript > [訂正版] Javascriptでクラスを継承する

[訂正版] 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

    No Related Posts

masuidrive(増井 雄一郎)
PukiWikiなどのオープンソース活動を経て、2005年からRuby on Railsに的を絞り、WEB2.0社 PingKingやニフティ アバウトミーの開発に関わる。これまでのフリー活動から転身し、2007年は1年だけ会社員として働いた後、起業のため渡米。2008年4月にBig Canvas Inc.設立。現在、米ベルビュー在住。

Comments:0

Comment Form
Remember personal info

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 [...]

Home > Javascript > [訂正版] Javascriptでクラスを継承する

Search
Feeds
Meta

Return to page top