2012年3月24日土曜日

開発環境

独習JavaScript 高橋 和也 (著), 竹添 直樹 (著), 里見 知宏 (著) の第7章(オブジェクト指向プログラミング)7.4(メソッドの定義)練習問題7.4、2, 3を解いてみる。

その他参考書籍

2. 3

コード(TextWrangler)

function Person(age, name, gender){
  if(!name){
    throw new Error('error: プロパティnameが未指定です');
  }
  this.age = age;
  this.name = name;
  this.gender = gender;
}
Person.prototype.equals = function(other){
  if(this.age && other.age){
    if(this.age != other.age){
      return false;
    }
  }
  if(this.gender && other.gender){
    if(this.gender != other.gender){
      return false;
    }
  }
  if(this.name != other.name){
    return false;
  }
  return true;
};
Person.getGenderString = function (gender){
  if(gender == 'male'){
    return '男性';
  } else if(gender == 'female'){
    return '女性';
  } else {
    return '?'
  }
};
var p1 = new Person(10,'javascript','male');
var p2 = new Person(10,'javascript','male');
var p3 = new Person(10,'javascript','female');
var p4 = new Person(20,'javascript','male');
var p5 = new Person(10,'javascript');
var p6 = new Person(10,'HTML5','male');
var p7 = new Person(10,'HTML5','female');
var people = [p2,p3,p4,p5,p6,p7];
var result = "people"+ "<br />" +
             "0: name: " + p1.name + 
             ", age: " + p1.age + 
             ", gender: " + p1.gender + 
             "(" + Person.getGenderString(p1.gender) + 
             ")<br />";
for(var i = 0 ; i < people.length ; i++){
  result += (i + 1) + ": name: " + people[i].name + 
            ", age: " + people[i].age + 
            ", gender: " + people[i].gender + 
            "(" + Person.getGenderString(people[i].gender) + 
            ")<br />";
}
result += "0と比較" + "<br />";
for(var i = 0; i < people.length ; i++){
  result += (i + 1) + ": " + p1.equals(people[i]) + "<br />";
}
$('#pre0').html(result);


4.

メソッドをインスタンスプロパティではなく、prototypeプロパティに対して定義すると、メモリを効率よく使えるというメリットがある。

0 コメント:

コメントを投稿