コンストラクタと静的メソッドを簡単に定義する
立て続けに質問することをお許し下さい。。
以下のようなPersonクラスがあるとします。
/**** Person クラス(全角スペース表記) ****/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
<META HTTP-EQUIV="Content-Script-Type" CONTENT="javascript">
<TITLE>教えて!gao</TITLE>
<SCRIPT TYPE="text/javascript">
function Person(name, age, sex, color) {
this.name = name;
this.age = age;
this.sex = sex;
this.color = color;
}
Person.prototype = {
name:null,
age:null,
sex:null,
color:null
};
Person.YELLOW = "黄色人種";
Person.BLACK = "黒色人種";
Person.WHITE = "白色人種";
function test() {
var person = new Person("ggaogg", 23, "male", Person.YELLOW);
var resultBlock = document.getElementById("resultBlock");
for (property in person) {
resultBlock.appendChild(document.createTextNode(property + " = " + person[property]));
resultBlock.appendChild(document.createElement("BR"));
}
}
</SCRIPT>
</HEAD>
<BODY ONLOAD="test()">
<DIV ID="resultBlock"></DIV>
</BODY>
</HTML>
/********************************************************/
これの実行結果は、以下の通りです。
name = ggaogg
age = 23
sex = male
color = 黄色人種
しかし、静的変数を、毎回「Person.」を付けて記述するのは面倒で、すべて{}でひとくくりになっていたほうが可読性も増すと思い、以下のようにできると思いましたが、そうしたところ
new Person("ggaogg", 23, "male", Person.YELLOW);
の部分がコンストラクタではないというようなエラーとなってしまいます。(Web等でこの書き方はあまり見かけないが自分は気に入っている)
/************ 変更した部分 ******************/
Person = {
YELLOW : "黄色人種",
BLACK : "黒色人種",
WHITE : "白色人種"
};
/********************************************/
多分、初めに行ったコンストラクタの定義とこの{}の定義とが競合しているためだと思うのですが、何かよい書き方ありませんでしょうか。
お礼
なるほど、タブを選択するのとクリックは別の扱いなんですね~