javascriptはじめました - 4限目 居残り
承前⇒javascriptはじめました - 4限目 ”タケルンバ”の型 - finalventの日記
モジラんところに、Core JavaScript 1.5 Reference:Global Objects:Function:call - MDCという説明があって(つうか翻訳ないのか?)、コードを活かして実行できるように補うとこんな感じ。つまり、call(またはapplyは)継承に使う、と。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> <script type="text/javascript"> //ベースのコンストラクタ function product(name, value){ this.name = name; if(value >= 1000) this.value = 999; else this.value = value; } //call(またはapply)とprototypeで継承する function prod_dept(name, value, dept){ this.dept = dept; product.call(this, name, value); } prod_dept.prototype = new product(); // since 5 is less than 1000, value is set cheese = new prod_dept("feta", 5, "food"); // since 5000 is above 1000, value will be 999 car = new prod_dept("honda", 5000, "auto"); function init(){ alert("cheese.value: "+cheese.value); // 5のままま alert("car.value: " + car.value); // 5000じゃなくて999になる。 } </script> </head> <body onload="init();"> </body> </html>
callの引数のところだけど、モジラのこの説明でいいのかな。
それはそれとして、以下のようにしたほうがわかりやすいような気がするんだけど、なんか問題があるんでしょうかね。よくわかんね。なんかまずいっすよみたいな話があったら、どなたか教えてくださいませ。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>sample</title> <script type="text/javascript"> //ベースのコンストラクタ function product(name, value){ this.name = name; this.value = value; } //call(またはapply)とprototypeで継承する function prod_dept(name, value, dept){ this.dept = dept; product.apply(this, arguments); if(value >= 1000) this.value = 999; else this.value = value; prod_dept.prototype = new product(); } // since 5 is less than 1000, value is set cheese = new prod_dept("feta", 5, "food"); // since 5000 is above 1000, value will be 999 car = new prod_dept("honda", 5000, "auto"); function init(){ alert("cheese.value: "+cheese.value); // 5のままま alert("car.value: " + car.value); // 5000じゃなくて999になる。 } </script> </head> <body onload="init();"> </body> </html>
このあたり、うざくてprototype.jsかなんか使ったほうがコードはすっきりするような気がするがというか、jQueryにはこういうクラス定義や継承の便宜みたいのはないんじゃないかな。そのあたりがよくわからん。つうか、jQueryというのがなんか抜本的にわからん。
ってか、継承に戻すと、AS3になるとこの手の書き方はバグりそう(たしかバグるという話もきいたが)。
JSのお勉強ってなんの役に立つのか根本的なところがよくわからない。
追記
はてなグループっていうのが依然よくわかってない私。
⇒g:javascript