■ 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 件のコメント:
コメントを投稿