【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
  • このエントリーをはてなブックマークに追加

関連記事

tableデータから棒グラフを描画できるjQueryプラグインTableBarChartを使ってみる

グラフを作成することについて 既存のtableデータから簡単に棒グラフの作成できるTableBar

記事を読む

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

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

記事を読む

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

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

記事を読む

【jQuery】hasClass is not a functionエラー

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

記事を読む

【jQuery】サイドバー固定に役立つサイト集

縦スクロール 縦方向にスクロールして指定の位置に来たら要素を固定させる方法のリンク集を紹介させてい

記事を読む

PHPでページリロードをしようと思ったができなかったので

header("Location: ".$_SERVER); とすればページをリロードでき

記事を読む

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

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

記事を読む

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

はてなブックマークのボタンをページの読み込みが終わった後にjavascript(jQuery)で追加

記事を読む

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

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

記事を読む

【Javascript】1つまたは複数のランダムな値を取得する

#shuffle1btn,#shuffle2btn{ padding: 4px 6px; }

記事を読む

NVIDIA DIGITSをSupervisorを使って自動起動する

はじめに 先日Ubuntu14.04にDIGITS 5をGPUなしP

【2017年度】GeForce 1080 Ti搭載BTOパソコン比較

はじめに 最近ディープラーニング用にGPUのないPCにDIGITSを

Windows用のシンプルなストップウォッチソフト紹介

Windows(10)でも使える使いやすいKAZAMITimerという

MNISTをDIGITS 5のCPUのみで試す(GPUなし)

はじめに DIGITSを使えばGUI操作で簡単にディープラーニングが

Windowsユーザが初めてMacBookを購入したときの注意点や感想

最近12インチのMacBookを購入しました。今までWindowsしか

Redmine3.2をUbuntu14.04にインストールして躓いた所についてメモ

はじめに Ubuntu14.04 ServerにRedmine3.2

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

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

→もっと見る

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