- ベストアンサー
javascriptのカプセル化について
- javascriptのカプセル化について初学者が悩んでいます。オブジェクト指向のパブリックとプライベートの関数を使ってテストプログラムを作成しましたが、method3()が呼ばれずにプログラムが終了してしまいます。
- 初学者がjavascriptのカプセル化について質問しています。オブジェクト指向のテストプログラムで、method1()とmethod2()は動作するが、method3()が呼ばれずにプログラムが終了してしまう問題があります。
- javascriptのカプセル化について質問があります。初学者がテストプログラムを作成しましたが、method3()が呼ばれずにプログラムが終了してしまいます。オブジェクト指向のパブリックとプライベートの関数を使っているのですが、どうすれば解決できるでしょうか?
- みんなの回答 (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();
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
動くところまでのソースとどう拡張したいのかの仕様を提示してください
お礼
早速の回答ありがとうございます。 前回答者さんのアドバイスもあり、解決に至りましたが、不足していた情報を下記に示します。 下記は質問当初の間違っているソースの方です。 -------------------------------------------------- <!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の所在を明確にするということでした。 回答に手間取らせてしまい、すみませんでした。 お気を悪くなさらないでください。 今後も、何かありましたら、よろしく、ご指南願います。 ありがとうございます。
お礼
早速の回答、ありがとうございます。 テストを行ったところ、3つのアラートが順番に表示され、無事終了したしました。 pringlezさんの修正後のコードを見て、ああ、そういうことか、と大きく頷いてしまいました。 一つ、勉強になりました。 これから、このコードを読み返して、しばらく、粘ってみたいと思います。 それから、ご指摘のメソッドと関数の違いについてですが、正直に言いますと、確かに理解不足かもしれません。その当たりも今後、勉強していきたいと思います。 分かりやすく、的確な説明で、とても参考になりました。 ご指南ありがとうございます。