【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 UI】タブをクリックしたときのイベントでselectが使えない

jQuery UIは1.10のバージョンではタブをクリックしたときのイベントの名前が変わっているよう

記事を読む

【jQuery】大量の画像で重くなったページを遅延ロードで軽くする方法【Lazy Load】

画像をふんだんに使っているページでは読み込みの際に非常に時間がかかるという問題点があります。数枚なら

記事を読む

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

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

記事を読む

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

幅固定サイトでのスマホ回転時Webサイトの横幅を合わせる方法のメモ。 下記2点の設定が必要です。

記事を読む

【ImgToAA】画像をAA化するツール

指定の画像を読み込ませてAA化するツールです。サンプルはこちら。 (使い方) 画像ファイ

記事を読む

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

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

記事を読む

AAアニメーション

javascriptでAAアニメーションしました。AAは以下のところから参照しました。(AAアニメー

記事を読む

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

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

記事を読む

【jQuery】クリックイベントでマウスホイールクリックを検知する

$("a").click(function(){ … }); によりクリックイベントを関連付け

記事を読む

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

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

記事を読む

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

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

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

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

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

→もっと見る

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