- ベストアンサー
メソッドに自分自身を渡す方法について
- メソッドに自分自身を渡す方法について、ソースコードの例を紹介します。
- クラスQuestionのメソッドcheckNumber()で、disp()を呼び出し、自分自身を引数として渡す方法について説明します。
- この方法を使うことで、メソッド内で自身のインスタンスを操作することができます。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#3です。 蛇足ですが、a要素はdiv要素を括ることが出来ません。 a要素が内容に持てるのはインライン要素だけです。 この場合、a要素で括る必要は全くなくて、<div style=\"position: relative;\"> にclickイベントを定義すれば済むと思います。 ------- document.write("<a href=\"JavaScript:q.checkNumber(1)\">"); document.write("<IMG src=http://kuratakatsuhiko.appspot.com/img/frame.JPG width=50 height=50 name=\"img\" border=\"0\">"); document.write("<div style=\"top:20px; left:20px; position:absolute; z-index:2;\" id=\"Layer4\" align=\"center\">"); document.write("1"); document.write("</div>"); document.write("</a>"); ------- element.addEventListener - MDC https://developer.mozilla.org/ja/DOM/element.addEventListener > for()の行で「'undefined' は Null またはオブジェクトではありません。」というエラーが発生します。 getDispNum() を探ってみるといいかもしれません。
その他の回答 (4)
- fujillin
- ベストアンサー率61% (1594/2576)
よくわからないけれど… function disp(q)のはじめのところで alert(q); alert(q.getDispNum()); みたいなのを実行してみれば? 想像するところ、前者はObjectかなんかを返すけれど、後者はundefinedなのではないだろうか?? これまた想像で、Question.getDispNum()が定義されていないとか、定義されていても返り値が設定されていない(=値はない null || undefined)とかあたりが怪しそう… 全体を見ても、No3様もご指摘のように、やりたいことが見えてこないのでどこが悪いとも言いにくい。
お礼
すみません。勉強しなおしてきます。
- think49
- ベストアンサー率59% (285/482)
#2の補足より引用。 > q.getDispNum()のqそのものがわからないのだと思います。 確かめてみたところ、q の値は正しく入っています。 Question(), getDispNum(), getNumber() は記載がなかったので、適当に書き加えました。 <script type="text/javascript"> (function(){ function Question(){ // 適当に書き加えました this.answer = 3; this.ansCount = 0; this.missCount = 0; this.test = '"Hello, World!"'; }; Question.prototype.checkNumber = function(number) // 質問文と同じ { if (number == this.answer) { this.ansCount++; } else { this.missCount++; } disp(this); } Question.prototype.getDispNum = function() // 適当に書き加えました { return 5; } Question.prototype.getNumber = function() // 同上 { return 3; } function disp(q) { // #2の補足と同じ document.write("<table>"); for (k = 0; k < q.getDispNum(); k++) { var n= q.getNumber(k); document.write("<div style=\"position: relative;\">"); document.write("<a href=\"JavaScript:q.checkNumber(1)\">"); document.write("<IMG src=http://kuratakatsuhiko.appspot.com/img/frame.JPG width=50 height=50 name=\"img\" border=\"0\">"); document.write("<div style=\"top:20px; left:20px; position:absolute; z-index:2;\" id=\"Layer4\" align=\"center\">"); document.write("1"); document.write("</div>"); document.write("</a>"); document.write("</div>"); } } var foo = new Question(); // コンストラクタ foo.checkNumber(1); // 実行 })(); </script> どこに問題があるのかわかりませんが、適当なコードを切り離して、問題を切り分けて考えてみる事をお勧めします。 別に質問された http://okwave.jp/qa/q5836614.html も何をしたいのか、どんなコードを書きたかったのか、がよくわかりません。 何か基本的なところで勘違いがあるような気もします。 プロトタイプ(prototype)によるJavaScriptのオブジェクト指向:CodeZine http://codezine.jp/article/detail/222
- imq
- ベストアンサー率72% (16/22)
ソースを見る限りはdispにthisは渡せる筈です。 dispのソースがないので分りませんが、disp側の処理がおかしくないですか? 想像ですが、引数ではなくthisキーワードでインスタンスにアクセスしようとしているとか。 ちなみにdispはメソッドではなく関数ですよね。
補足
すみません、dispは関数でした。 dispの内容を以下に記載します。 function disp(q) { document.write("<table>"); for (k = 0; k < q.getDispNum(); k++) { var n = q.getNumber(k); document.write("<div style=\"position: relative;\">"); document.write("<a href=\"JavaScript:q.checkNumber(1)\">"); document.write("<IMG src=http://kuratakatsuhiko.appspot.com/img/frame.JPG width=50 height=50 name=\"img\" border=\"0\">"); document.write("<div style=\"top:20px; left:20px; position:absolute; z-index:2;\" id=\"Layer4\" align=\"center\">"); document.write("1"); document.write("</div>"); document.write("</a>"); document.write("</div>"); } } for()の行で「'undefined' は Null またはオブジェクトではありません。」というエラーが発生します。 q.getDispNum()のqそのものがわからないのだと思います。 自分ではこれ以上わかりません。申し訳ありませんが、お知恵をお貸しください。
- babu_baboo
- ベストアンサー率51% (268/525)
disp.call(this);//ではだめか?
補足
だめでした。引数がわたっていないようです。 disp内部で、document.writeで引数を表示させたところ、undefinedと表示されました。
お礼
ありがとうございます。 試してみます。