【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/jQuery】強制的にページをスクロールさせる方法

強制的にページをスクロールさせたいと思って調べていたのですが、なかなか思うようなものが見つからず困っ

記事を読む

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

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

記事を読む

ニコニコ動画の外部プレイヤーを動的に設置する【javascript/jQuery】

ニコニコ動画の外部プレイヤーはページのはじめの読み込みのときにしか表示されず、javascriptで

記事を読む

javascriptでチェックボックスを一括で変更する方法

チェックボックスのチェックに一つ一つチェックを入れていくのは非常に手間がかかるのでjavascrip

記事を読む

【jQuery UI】タブをクリックしたときのイベントでselectが使えない

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

記事を読む

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

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

記事を読む

【jQuery】hasClass is not a functionエラー

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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 ↑