技術はあとからついてくる。

就活開始の半年前にエンジニアに目覚めた人

JavaScriptのオブジェクトを理解する ②

フロントエンド強化月間。勉強アウトプット。

コンストラクタの定義

var Member = function(firstName, lastName, age) {
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
    this.getInfo = function() {
        return '氏名:' + this.lastName + '' + this.firstName + '(' + this.age + '歳)';
    }
}

var jsman = new Member('man', 'js', 24);
console.log(jsman.getInfo()); // 氏名: js man(24歳)

通常、JavaScriptでは、関数内で呼び出すthisは関数呼び出し元のオブジェクトを参照する。
new演算子を使ってインスタンス化した場合、thisはそのインスタンス自信を指す。

オブジェクトとプリミティブ型について

プリミティブ型(boolean, number, string, null, undefined)は通常、値そのものを指すが、一時的にオブジェクトになっているケースがある。

var num = 100;
var num2 = new Number(100);

console.log(typeof num); // number
console.log(typeof num2); // Object

console.log(num.toString()); // 100
console.log(num2.toString()); // 100

まず、typeof(値の型を調べる演算子)の結果を見ると
numは数値リテラルを代入しただけなので、プリミティブ型(number)であるのに対して、 num2はnew演算子を使ってNumberコンストラクタを呼び出したので、Numberオブジェクトのインスタンス(object)が格納されている。

次に、それぞれの変数のtoString()の結果を見ると
プリミティブ型であるnumも、toString()を呼び出せていることがわかる。
(オブジェクトかのように振舞っている)

number, string, booleanのプリミティブ型には、それぞれラッパーオブジェクトが存在する。
JavaScriptのプリミティブ型は、オブジェクトとして振る舞おうとした時に、バックグラウンドでそれぞれの型に応じたラッパーオブジェクトを生成する。
そしてオブジェクトとしての振る舞いが完了すると、ラッパーオブジェクトは破棄され、値は元のプリミティブ型に戻る。

JavaScriptではほぼ全てのものがオブジェクトか、オブジェクトのように振る舞う」と言うことができる。

nullとundefinedに関してはラッパーオブジェクトを持っていないため、いつでもプリミティブな存在となるため、メソッドの呼び出しやプロパティの取得はできない。