JS (1) : JavaScriptでのクラス定義

■ クラスの定義方法

例えばASだと、このような定義になると思いますが、

package{
	public class MyClass{

		public var myValue;

		//コンストラクタ
		public function MyClass(value1, value2){
			var newValue = value1 + value2;
			test1(newValue);
		}

		public fucntion test1(value3){
			myValue = value3;
			trace("myValue:", myValue);
		}

		public fucntion test2(){

		}
	}
}


JSではこのように書くと良いと思います。

var MyClass = function(){
	this.myValue;
	this.initialize.apply(this, arguments);
}

MyClass.prototype = {
	//コンストラクタ
	initialize: function(value1, value2) {
		var newValue = value1 + value2;
		test1(newValue);
	},

	test1: function(value3){
		this.myValue = value3;
		console.log("myValue:", myValue);
	},

	test2: function(){

	}
}


説明 :
・JSに変数の型指定はありません。
・この書き方をすると、関数内で定義した変数を除いて、全てpublicになります。クラス内でprivate変数はつくれません。
・イベント処理っぽいことが入って来た時にさらに掘り下げますが、14行目の「this」は必須です。
・console.logはfirebugや、WebKitのコンソールで確認。


■ サンプル

できるだけASっぽく、1クラス1ファイルで考えてみます。
ドキュメントクラス風にMainクラスを実行して、SampleClassクラスのインスタンスをつくり、
その中の関数を呼んで終わり。という簡単なプログラムです。

まずHTMLファイルでmain.jsを読み込む。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title></title>
<script type="text/javascript" src="main.js"></script>
</head>

<body>
	<div id="content"></div>
</body>

</html>


main.jsの中身

document.write('<script type="text/javascript" src="sampleClass.js"></script>');

onload = function(){
	var main = new Main();
}

//Mainクラス
var Main = function(){
	this.initialize.apply(this, arguments);
}
Main.prototype = {
	//コンストラクタ
	initialize: function() {
		var sampleInstance = new SampleClass("Hello World!");
		sampleInstance.talk();
	}
}


sampleClass.jsの中身

//SampleClassクラス
var SampleClass = function(){
	this.myMessage = "";
	this.initialize.apply(this, arguments);
}
SampleClass.prototype = {
	//コンストラクタ
	initialize: function(message) {
		this.myMessage = message;
	},

	//this.myMessageを出力
	talk: function(){
		console.log(this.myMessage);
		document.getElementById("content").innerHTML = this.myMessage;
	}
}


説明 :
・main.jsの1行目はASでいうimportっぽい書き方をしてみたくてやっています。
(HTMLをいじらずJSだけで完結できるので便利)
・実際はJQueryのonLoadから処理を始めて行くと色々できるようになります。(次回以降)

ダウンロード :
http://soohei.net/blog/files/js_01.zip


参考 :
http://d.hatena.ne.jp/amachang/20060516/1147778600
http://d.hatena.ne.jp/vividcode/20090706/1246905260


2010/8/12 21:20

JS (0) :

一年に一度のフェス日記と化していたブログですが、せっかく心新たにJavaScriptを覚えているので、Flashに本格的に足を踏み入れるキッカケとなった緒方さんのFLASH OOP 最終章のような素敵な内容を目指します。

■ Flashを覚えた時のように、JSを覚える

・(1) JavaScriptでのクラス定義
・(2) JSONデータの読み込み
・(3) 表示部分を準備
・(4) スライドショーのプログラム
・(5) アニメーションをつける

ActionScriptを使える人が脳内で仕組みを置き換えながら理解できるようにします。ベストな実装方法かはわかりません。逆に教えて頂きたい。今日から少しずつまとめます。


2010/8/12 20:00

2009 – 2010

大晦日らしく1年をまとめます。

1月~4月
・ニセコ
・スノボ三昧
・iida公開

5月~8月
・骨展
・FUJI ROCK
・FUJI ROCKメンバーと飲む日々
・オトダマ

9月~10月
・Prodigy@幕張
・朝霧JAM
・渋谷の櫻坂の店員が変わった (味も変わった)

11月~12月
・DROPCLOCK@ISSEY MIYAKE
・自宅引越し
・FPM公開 (http://www.fpmnet.com/)
・初YCAM (セミトラ展へ)

今年一番聞いたアルバムは
FABRICLIVE.43 – SWITCH & SINDEN PRESENT GET FAMILIAR MIXED BY SINDEN

一番ハマった曲は
ドッグンドール / ゆらゆら帝国
今頃ゆら帝をちゃんと聴きました。

ベストアクトは
BASEMENT JAXX @ FRF と
SINDEN @ 朝霧

でした。

皆様良いお年を。
来年もよろしくお願いします。

2009/12/31 18:25

DROPCLOCK @ ISSEY MIYAKE

最近のTHAでの仕事です。
DROPCLOCKの4面バージョンをISSEY MIYAKEの南青山の路面店で展示中です。

WOMEN, MEN, PLEATS PLEASEの各店舗でPARIS, NEW YORK, TOKYOの時計になっています。お近くをお通りの際はよろしくお願いします。毎日10時〜23時、12月下旬まで展示予定です。

みなさま、ありがとうございました。

2009/10/26 2:07

2009 fes

今頃振り返り。

FUJI ROCK FESTIVAL 09

前半ずーっと雨。フル装備で行ったので無事だった。
帰りの高速で虹が見えた。
・SIMIAN MOBILE DISCO 良かった。
・卓球@岩盤ブース 飲んで踊ってFRFで初オール。
・OASIS もう2度と見れないのでは。。Don’t Look Back In Anger はアコースティック。
・FRANZ FERDINAND アレックスの目からビームが。
・80KIDZ 初めて見た。楽しくて最前で踊ってた。
・ソカバン みんなで歌ってた。
・BASEMENT JAXX 最強の締め。ベストアクト。

朝霧JAM

富士山が素晴らしい。夜中からカセットコンロでキムチ鍋。次の日も朝からキムチ鍋&うどん。
・SINDEN 超-楽しかった。One More Time かけてた。ベストアクト。
・ゆらゆら帝国 かっこよかった。ブーム到来の予感。
・SPECIAL OTHERS みんなふわふわ。
・YOUR SONG IS GOOD 楽しい締め。

2009/10/26 2:00