2011年4月30日土曜日

constructorプロパティ(JavaScript)

■ constructorプロパティの利用


JavaScriptでは、constructorプロパティを呼ぶことで自分を生成したオブジェクトのコンストラクタ関数を呼ぶことが出来ます。

function MyObject(x) {
   this.x = x;
}

var my = new MyObject(1);

document.writeln("MyObject: " + my.constructor); 


このような結果になります。

MyObject: function MyObj(x) {  this.x = x; }


これは、定義した関数を表示しただけなので元の関数を変数として使用したものと同じ結果になります。

document.writeln((my.constructor == MyObj)); // true


これを使用してインスタンスの直接のオブジェクトが調べられます。

var arr = new Array(1, 2, 3, 4, 5);
document.writeln(arr.constructor == Array); // true
document.writeln(arr.constructor == Object); // false
document.writeln(arr instanceof Object); // true //instanceof演算子だとスーパークラスにもtrueになる


また基本型もラップされてラッパーオブジェクトとして評価されます。
document.writeln((1).constructor == Number); // true
document.writeln(("文字列").constuctor == String); // true
document.writeln((function() {}).constructor == Function); // true 


以上からconstructorプロパティはインスタンスが何のオブジェクトから生成されたか判定できるので有用です。

■ Objectオブジェクトの不思議な挙動


Objectオブジェクトのインスタンスでconstructorプロパティを生成する場合、引数を入れたObjectのインスタンスと比べるとエラーになります。

var obj = new Object();
document.writeln(obj.constructor == Object); // true

obj = new Object(1);
document.writeln(obj.constructor == Object); // false

なんだか変ですね。

参考:https://developer.mozilla.org/ja/Core_JavaScript_1.5_Reference/Global_Objects/Object/constructor

0 件のコメント:

コメントを投稿