• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:javascriptのカプセル化について)

javascriptのカプセル化について

このQ&Aのポイント
  • javascriptのカプセル化について初学者が悩んでいます。オブジェクト指向のパブリックとプライベートの関数を使ってテストプログラムを作成しましたが、method3()が呼ばれずにプログラムが終了してしまいます。
  • 初学者がjavascriptのカプセル化について質問しています。オブジェクト指向のテストプログラムで、method1()とmethod2()は動作するが、method3()が呼ばれずにプログラムが終了してしまう問題があります。
  • javascriptのカプセル化について質問があります。初学者がテストプログラムを作成しましたが、method3()が呼ばれずにプログラムが終了してしまいます。オブジェクト指向のパブリックとプライベートの関数を使っているのですが、どうすれば解決できるでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.2

method1とmethod3は test1のメソッドです。 一方でmethod2は test1内で定義されたローカル関数です。 ローカル関数であるmethod2にとっては thisといわれても何のことやらさっぱりわからないという話ですね。 ※その前にメソッドと関数の違いはわかりますかね? 以下のように変更すれば動きますよ。 var test1 = function() { this.method1 = function() { alert("method1"); method2(this); }; var method2 = function(obj) { alert("method2"); obj.method3(); }; this.method3 = function() { alert("method3"); }; }; (new test1()).method1();

beginner22
質問者

お礼

早速の回答、ありがとうございます。 テストを行ったところ、3つのアラートが順番に表示され、無事終了したしました。 pringlezさんの修正後のコードを見て、ああ、そういうことか、と大きく頷いてしまいました。 一つ、勉強になりました。 これから、このコードを読み返して、しばらく、粘ってみたいと思います。 それから、ご指摘のメソッドと関数の違いについてですが、正直に言いますと、確かに理解不足かもしれません。その当たりも今後、勉強していきたいと思います。 分かりやすく、的確な説明で、とても参考になりました。 ご指南ありがとうございます。

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

動くところまでのソースとどう拡張したいのかの仕様を提示してください

beginner22
質問者

お礼

早速の回答ありがとうございます。 前回答者さんのアドバイスもあり、解決に至りましたが、不足していた情報を下記に示します。 下記は質問当初の間違っているソースの方です。 -------------------------------------------------- <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>test</title> </head> <body> <button id = "button1" onclick="showAlert()">showAlert</button> <script> var showAlert = function(){ var test = new test1(); test.method1(); }; var test1 = function(){ this.method1 = function(){ alert("method1"); method2(); }; var method2 = function(){ alert("method2"); this.method3();//実行されない? }; this.method3 = function(){ alert("method3"); }; }; </script> </body> </html> ------------------------------------------------- 拡張についてですが、javascriptの勉強中にテスト用として作ったプログラムですので、取り立て拡張するという目的はありません。 動作としては、"methot1"~"method3"までのアラートを順番に表示させることを狙っております。 前回答者のpringlezさんのご指摘では、this.method3()の引数にthisを渡して、thisの所在を明確にするということでした。 回答に手間取らせてしまい、すみませんでした。 お気を悪くなさらないでください。 今後も、何かありましたら、よろしく、ご指南願います。 ありがとうございます。

関連するQ&A

専門家に質問してみよう