【javascript】privateのメソッドからpublicなメンバを呼ぶ

公開日: : JavaScript/jQuery

スポンサーリンク

javascriptでのクラス定義

javascriptではいわゆる正確なクラスは作れませんが、それに近いものをfunctionキーワードを用いて作ることはできます。

恐らくpublicは「thisキーワード」で定義したもの、privateは「var」で定義したものとして使い分けていると思いますが、この使い分けですと「var」で定義した関数の中で「thisキーワード」を使用してpublicメンバを呼び出そうとしてもうまく呼び出されないはずです。以下のような感じです。

var Hoge = function(){ 
    //fuga!と表示するpublicメソッド
    this.fuga = function(){
        alert("fuga!!") ;
    }
    //fugafuga!!と表示するprivateメソッド
    //このなかでpublicメンバを呼んでみる
    var fugafuga = function(){
        alert("fugafuga!!");
        this.fuga();    //←this.fuga is not a functionエラー
    }
}

それはprivateメソッドとして「var」で定義した関数内でのthisはその関数内を参照するものとなってしまうから…だと思います。

privateからpublicを呼ぶには

では、この方法で定義したいわゆるprivateのメソッド内でpublicメンバを呼び出せないのか…? といえばそうではなく、あらかじめそのクラスの参照を作成しておけば可能となります。

var Hoge = function(){
    //あらかじめこのクラスのthisキーワードの参照を保持しておく
    var that = this ;    
    //fuga!と表示するpublicメソッド
    this.fuga = function(){
        alert("fuga!!") ;
    }
    //fugafuga!!と表示するprivateメソッド
    //このなかでpublicメンバを呼んでみる
    var fugafuga = function(){
        alert("fugafuga!!");
        //this.fuga();    //←this.fuga is not a function
        that.fuga();
    }
    //ここでテストする
    //問題のprivateメソッドを呼ぶ
    this.test = function(){
        fugafuga();
    }
}
var h = new Hoge();
h.test();   //「fugafuga!!」「fuga!」

はじめからthisキーワードを「that」という変数(名前はもちろんなんでも良い)にいれておけばそれを通してメンバの情報を使うことができるようになります。

この方法は色々なプラグイン(ライブラリ)で拝見することが多く、はじめは何をやっているのかよく分からなかったのですが、非常に便利なものだと思いました。

スポンサーリンク
Amazon
  • このエントリーをはてなブックマークに追加

関連記事

【jQuery】hasClass is not a functionエラー

jQueryでセレクタを使って取得してきたjQueryオブジェクトからその子要素をchildrenで

記事を読む

AmazonのランキングRSSから画像リンクを作る

Amazon RSS Amazonでいい感じのRSSが無いかと探していたのですが実は本家に素晴らし

記事を読む

【javascript】正規表現文字抽出簡易ツール

jQueryで作成した正規表現による文字抽出用スクリプトです。 (使い方) 「正規表

記事を読む

【javascript】RGB⇔カラーコード変換ライブラリ

RGBをカラーコードに変換、または、カラーコードをRGBに変換したい場合が出てきたのでどういうも

記事を読む

【jquery】iframe内のスクロールイベント設定とスクロール量取得

ページ内に設置したiframeのスクロールイベントおよびスクロール量を取得したかったのでメモ

記事を読む

jQueryのカラーピッカーライブラリFarbtastic Color Pickerを使う

.farbtastic .wheel { background: url(http://mem

記事を読む

【javascript】RSSを読み込んで表示させる【Google Feed API】

jQueryで簡単にRSSフィードを表示させる方法としてGoogleFeedAPIを利用するというの

記事を読む

【javascript/jQuery】JSON形式のデータの表示確認をする

PHPであれば「var_dump」や「print_r」などでJSON形式のデータの中身が思い通りの者

記事を読む

ニコニコ動画のRSSをjavascriptで読み込んで表示させる

ニコニコ動画のランキングRSSをjQueryで読み込んで表示するプログラムを作成しました。RSSの読

記事を読む

【jQuery/javascript】Tweetボタンを動的に設置する

Twitterボタンをブログやサイトに設置するとき読み込みに時間がかかってしまって困るといったことや

記事を読む

UWSCを使ったソフト自動立ち上げ【SoftEther VPN Server】

やりたいこと 最近SoftEtherという筑波大学発のベンチャー企業

【PHP】headerでContent-Typeを指定したのに効かない場合の対処法

PHPでサイトマップを作ろうと思い、XML形式のファイルを出力しようと

スマホ向け幅固定サイトの回転時の幅対応方法

幅固定サイトでのスマホ回転時Webサイトの横幅を合わせる方法のメモ。

【PHP】特定のURLからそのAtomやRSSのフィードを抽出する方法

特定のURLからRSSやATOMのフィードを抽出する方法をメモ。 流

フィード抽出ツール(RSS1.0、RSS2.0、atom)

任意URL サイト名 サイトURL RSS1.0

格安プラン限定レンタルサーバー機能比較表(2016年)

はじめに  最近新しい共用サーバーをレンタルしようと思い調査およびそ

kindle unlimitedが便利だったのでお勧めの使い方など感想メモ

 kindle unlimitedというサービスが8/3からAmazo

→もっと見る

  • Author : ががんぼ
    プログラミングやWeb関係で気付いたことについてメモしていく予定。だいたいが備忘録ですが、自分でサンプルを作って動かしてみたりしています。
PAGE TOP ↑