constructorプロパティ

広告

constructorプロパティは対象のオブジェクトを生成するために使用されたコンストラクタ関数への参照が代入されています。

オブジェクトのコンストラクタ関数への参照

constructorプロパティを参照することで対象のオブジェクトのコンストラクタ関数への参照を取得できます。

次の例を見て下さい。

var obj = new Object();
alert(obj.constructor);

この場合、次のように表示されます。

function Object() {
    [native code]
}

またObjectクラスの子クラスでconstructorプロパティを継承しているクラスのオブジェクトに対しても同じように使用することができます。例えばArrayクラスのオブジェクトで試してみます。

var ary = new Array();
alert(ary.constructor);

この場合、次のように表示されます。

function Array() {
    [native code]
}

constructorプロパティを参照することで取得できる値はコンストラクタ関数への参照ですので「==」演算子または「===」演算子によって比較することができます。

次の例を見てください。

var ary = new Array();
if (ary.constructor == Array){
  alert("Arrayクラスのオブジェクトです");
}

「==」演算子の左辺にはArrayクラスのコンストラクタ関数であるArray関数への参照が含まれており、右辺はArray関数が記述されていますので条件式は「true」を返します。このようにconstructorプロパティを使うことで対象のオブジェクトの元になっているクラスを調べられる場合があります。

サンプルコード

では簡単なサンプルで試してみます。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>JavaScript テスト</title>
</head>
<body>

<script type="text/javascript" src="./js/script2_1.js">
</script>

</body>
</html>
function classcheck(func){
  if (func == Object){
    document.write("Object Class<br />");
  }else if (func == Array){
    document.write("Array Class<br />");
  }else if (func == String){
    document.write("String Class<br />");
  }else{
    document.write("Other<br />");
  }
}

var obj = new Object();
var ary = new Array();
var num_obj = new Number(20);
var str_obj = new Object("Hello");

document.write("<p>");

classcheck(obj.constructor);
classcheck(ary.constructor);
classcheck(num_obj.constructor);
classcheck(str_obj.constructor);

document.write("</p>");

上記を実際にブラウザ見てみると次のように表示されます。

p2-1

前のページで記載した通り「new Object("Hello")」でオブジェクトを作成した場合は、引数に指定した基本データ型のラッパークラスのコンストラクタ関数を使ってオブジェクトが作成されます。よってこのオブジェクトのconstructorプロパティにはStringクラスのコンストラクタ関数への参照が含まれています。

( Written by Tatsuo Ikura )