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

関連記事

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

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

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

記事を読む

【javascript/jQuery】Progressbarで処理の進捗状況を表示する

jQuery UIでProgressbarを使う 処理経過を表示する場合プログレスバーにより提示さ

記事を読む

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

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

記事を読む

monacaでWebサイトをアプリ化

monacaを使ってWebサイトをアプリ化するための叩き台としてのメモです。 Webサイトのア

記事を読む

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

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

記事を読む

【Three.js/jThree.js】カメラ内部パラメータを変更して視野などを変える

jThree.jsでカメラの内部パラメータを変更するのに手間取ったのでメモ。参考にしているjThre

記事を読む

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

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

記事を読む

【DeepLearning】物体検出手法のSSD(Keras版)を試す (Ubuntu14.04)

はやりのディープラーニングの物体検出手法の一つであるSSDのサンプルを

【Laravel5】既存のDBからデータを取得して表示する

はじめに 今まで作ったWebサイトをLaravel5で見れるようにし

【C++/OpenCV】cv::Matの画像にインパルスノイズを付加する

OpenCVで画像にノイズを付け足したいと思って調べたところ、Pyth

Intel Corei7-7700TでHTC Viveの動作確認

はじめに HTC ViveというVRヘッドセットで遊んでみたのでその

【Python】フォルダ内のカッコ付き数字ファイルを一括でリネームするスクリプト

はじめに タイトルどおりなのですが、指定フォルダ内のファイルのファイ

OpenCV3.1のTracking APIでトラッキングを試す

はじめに 先日OpenCV3.1をopencv_contrib付きで

パソコンを複数台使う際便利なツール

はじめに 先日、機械学習用にGPUを積んだBTOパソコンを購入しまし

→もっと見る

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