Javascript コンストラクタ

コンストラクタというものを学んだので、ハックに残しておきます。

コンストラクタとは。。。

オブジェクトを作成し、初期化する関数オブジェクト

// コンストラクタを定義する
function Person(name, age) {
    this.name = name;
    this.age = age;
    this.getName = function() {
        return this.name;
    };
}

// new キーワードをつけてインスタンスを生成する
//personというオブジェクトを作成し、プロパティを初期化
var person = new Person('Daiki', 19);

//プロパティやメソッドにアクセス
console.log(person.age); //19
console.log(person.getName()); // Daiki

そして、プロトタイプという言葉も見かけたのでこれもハックに残しておきます。プロトタイプは、汎用性の高い関数に使ってあげるとよさそうです。

var p1 = new Person('Daiki');
var p2 = new Person('Nishikawa');

if( p1 === p2 ) {
    //false (オブジェクトとしては異なるもの)
}

if( p1.prototype === p2.prototype ) {
    //true (p1, p2 でプロパティが共有されている)
}

//より具体的な例
function Person(n){
  this.name = n;
}

Person.prototype.city = 'Tokyo';
Person.prototype.change_city= function(c){  
  Person.prototype.city = c;
}

var p1 = new Person('Daiki');

console.log( p1.name ); //Daiki
console.log( p1.city ); //Tokyo


var p2 = new Person('Nishikawa');

console.log( p2.name ); //Nishikawa
console.log( p2.city ); //Tokyo


p2.change_city('New York');
//共有されていることを確認
console.log( p2.city ); //New York
console.log( p1.city ); //New York 確かにTokyoからNewYorkに変わっている!!
/*
仕組みとしては、
  1.最初に p1.city を探す
  2.ないので、Person.prototype.cityをさがす。
  3.p2.change_city('New York');でプロパティがセットしてある!
*/


p1.age = 20;
//共有されていないことを確認
console.log( p1.age ); //20
console.log( p2.age ); //undefined