HEXA BLOG
ヘキサブログ
プログラム
JavaScriptとクラスとクロージャー
当面はJavaScriptに関するネタでblogを書こうと決めているgood sunこと山口です。
今回は前回と同じく素材が用意出来なかった為、
第一回で書いたスクリプトの構文について説明していきたいと思います。
素材を用意する時間がなくてFINAL FANTASY XIII-2 とPSVitaは遊ぶ時間があるのが不思議です。
このJavaScriptシリーズ第一回では何気なく記述をしていますが、
JavaScriptは俗に言うオブジェクト指向な言語なので、
C++等で使われている”クラス”のようなものが書けます。
function Node(){ ~ } Node.prototype.update = function(){ ~ }
この辺等がそうですね。
一見すると関数を定義しているだけのようですが、
JavaScriptでのクラスのようなものはこの関数の定義を利用して作成します。
C++での
Class MyClass{ public: MyClass(value):myValue{ } ~MyClass(){ } int addValue(value){ return myValue + value; } protected: private: int myValue; }; ... MyClass* pMyClass = new MyClass(3); int v = pMyClass->addValue(5);
といった記述は
JavaScriptでは
function MyClass(value){ this.myValue = value; } MyClass.prototype.addValue = function(value){ return this.myValue + value; } val myClass = new MyClass(3); val v = myClass.addValue(8);
といった感じに書けます。
如何でしょうか、結構好感の持てる書式だと思います。
最後にJavaScriptで気をつけなければいけないthisからはじまるクロージャー入門をしたいと思います。
第一回で記述した以下の処理に注目して下さい。
Frame.prototype.run = function(lastTime){ ~ var _this = this; setTimeout(function(){_this.run(nowTime);}, nextTime); }
Frameクラスのrun関数は
最後に実行した時間を引数にとって、
一定時間後に再度自分自身のrun関数を呼び出す事を続ける処理です。
setTimeout関数に渡す第一引数ですが、
C,C++で言うところの関数ポインタのようなものになります。
関数内に無名関数定義を書けるのはとてもいい感じです。
この無名関数内の処理ですが、
自分自身のrun関数を呼び出したいので、
this.run(nowTime);
と記述しても良さそうではありますが
thisという予約語が関数を持つオブジェクトのインスタンスを挿すキーワードなので、
このthisは登録された無名関数を呼び出す関数を持つオブジェクトのインスタンスを挿してしまい、
Frameオブジェクトのインスタンスを指してくれません。
正しくFrameオブジェクトのインスタンスthisを使う為に、
直前で_this変数にthisを代入して_this経由でFrame.prototypeのrun関数を呼び出しています。
この関数の引数にない変数を堂々と使えるのは、
クロージャーという仕組みらしいです。
関数内関数とそれを取り巻く変数との紐付けみたいな感じでしょうか。
よく見ると例としてあげた関数の引数にとっているnowTimeも引数に無い変数ですね。
これを利用するとJavaScriptでもprivate変数のようなものを作成する事が出来ます。
function MyClass(){ var _this = this; function privateActivate(){ var value; _this.__proto__.getFunc = function(){return value;} _this.__proto__.setFunc = function(argv){value = argv;} } privateActivate(); } var myClass = new MyClass; myClass.setFunc(3); myClass.getFunc() + 5;
なんとも不思議な感じです。
普段使わない言語を使うと頭の体操になっていい感じです。
来年こそは素材を準備してスマートフォン用のダイナミックなページ作成に挑戦します。
CATEGORY
- about ヘキサ (166)
- 部活動 (6)
- CG (18)
- プロジェクトマネジメント (1)
- 研修 (5)
- 美学 (1)
- いいモノづくり道 (230)
- 採用 -お役立ち情報も- (149)
- プログラム (188)
- デザイン (99)
- ゲーム (274)
- 日記 (1,104)
- 書籍紹介 (113)
- その他 (875)
- 就活アドバイス (20)
- ラーメン (3)
- ライフハック (25)
- イベント紹介 (10)
- 料理 (23)
- TIPS (7)
- 怖い話 (3)
- サウンド (5)
- 子育て (1)
- 筋トレ (1)
- 商品紹介 (21)
- アプリ紹介 (31)
- ソフトウェア紹介 (33)
- ガジェット紹介 (12)
- サイト紹介 (10)
- 研究・開発 (34)
- 回路図 (4)
- アナログゲーム (40)
- 交流会 (21)
- 報告会 (3)
- インフラ (25)
- グリとブラン (6)
- カメラ (9)
- クラフト (27)
- 部活 (14)
- 画伯 (15)
- カレー (6)
- 音楽(洋楽) (6)
- 映画・舞台鑑賞 (43)
- 飼育 (5)
- いぬ (8)
- ねこ (19)
ARCHIVE
- 2024年
- 2023年
- 2022年
- 2021年
- 2020年
- 2019年
- 2018年
- 2017年
- 2016年
- 2015年
- 2014年
- 2013年
- 2012年
- 2011年
- 2010年
- 2009年
- 2008年
- 2007年