感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

JavaScriptでオブジェクトリテラルを使ったり、配列リテラルを使うサンプル。

<スポンサーリンク>

JavaScriptのthis参照

this参照はオブジェクトを参照する。

参照先はトップレベルコードと関数内で異なる。
基本的な規則は以下の通り。

  • トップレベルコードのthis参照はグローバルオブジェクトを参照
  • 関数内のthis参照は関数雨の呼び出し方法で異なる

詳しくは別の記事に改めてまとめたい。

JavaScriptのオブジェクト

JavaScriptのオブジェクトはキーと値の組のハッシュテーブルとみなすことができる。
値はプリミティブか、あるいは他のオブジェクトになるが、どちらの場合もプロパティと呼ばれる。
値は関数にすることができ、その場合はメソッドと呼ばれる。
JavaScriptでオブジェクトを作成するサンプルは以下の通り。

//空のオブジェクト
// > undefined
var person = {};
// > undefined

//プロパティを追加する
// > undefined
person.name = "sho322";
// > 'sho322'

//メソッドを追加する
// > undefined
person.getName = function() {
	return person.name;
};
// > [Function]

//メソッドを使ってみる
// > undefined
console.log(person.getName());
// > sho322
// > undefined

console.log(person.name);
// > sho322
// > undefined

//プロパティを削除する
// > undefined
delete person.name
// > true

console.log(person.name);
// > undefined
// > undefined

空のオブジェクトを作り、そこにメソッドやプロパティを追加し、deleteで削除まで行なっている。

JavaScriptにはコンストラクタ関数がある。
しかし、JavaScriptパターンという本では、コンストラクタからオブジェクトを作ることは「アンチパターン」とされている。
組み込みコンストラクタを使ってオブジェクトを作る構文は以下の通りである。

var hoge = new Object();

以下は比較サンプル

var car = {name : "toyotacar"};
// > undefined
console.log(car.name);
// > toyotacar
// > undefined

var car2 = new Object();
// > undefined
car2.name = "nissancar";
// > 'nissancar'

console.log(car2.name);
// > nissancar
// > undefined

なぜオブジェクトコンストラクタアンチパターンか。

new Object();は引数によって振る舞いが変わる。
たとえば以下のように。

var o = new Object();
// > undefined
console.log(o.constructor === Object);
// > true
// > undefined

var o = new Object(7);
// > undefined
console.log(o.constructor === Number);
// > true
// > undefined
console.log(o.toFixed(3));
// > 7.000
// > undefined

var o = new Object("hoge,fuga");
// > undefined
console.log(o.constructor === String);
// > true
// > undefined
console.log(typeof o.substring);
// > function
// > undefined
console.log(o.substring(2,5));
// > ge,
// > undefined

このように動的に振舞いが変わってしまうと、予期せぬ結果をもたらす可能性がある。

JavaScriptで配列を作る方法

JavaScriptで配列を作るサンプルはこちら。
new Array();を使うパターンと配列リテラルを使うパターンがある。
基本的には配列リテラルを使う。

//new Arrayを使うパターン
// > undefined
var a = new Array("mizky", "yuki", "takaky");
// > undefined
console.log(typeof a);
// > object
// > undefined
console.log(a);
// > [ 'mizky', 'yuki', 'takaky' ]
// > undefined


var a2 = ["sho322","toshi","michitaka"];
// > undefined
console.log(typeof a2);
// > object
// > undefined
console.log(a2);
// > [ 'sho322', 'toshi', 'michitaka' ]
// > undefined
console.log(a2.length);
// > 3
// > undefined
console.log(a.constructor === Array);
// > true
// > undefined

配列はobjectなので、typeof演算子を使うとobjectが返る。
ECMAScript 5ではArray.isArrayというメソッドが定義されている。

var array = ["hoge", "fuga", "foo"];
// > undefined
console.log(Array.isArray(array));
// > true
// > undefined

Array.isArray(引数)は引数が配列のときにtrueを返す。

勉強した本

JavaScriptパターン ―優れたアプリケーションのための作法

JavaScriptパターン ―優れたアプリケーションのための作法

感謝のプログラミング

今回で感謝のプログラミングは【540時間目】
10000時間まで、あと【9460時間】