Macromedia Flash非公式テクニカルノート

Object.constructor

ID: FN0301004 Product: Flash

Platform: All
Version: 5.0 and above

*注記
このプロパティはドキュメント化されていません。

シンタックス
myObject.constructor

説明
プロパティ; オブジェクト(インスタンス)の初期化に使用されたコンストラクタ関数を参照します。

コンストラクタがプロトタイプオブジェクトを生成すると、その参照が'prototype'プロパティに格納されます。そして、プロトタイプオブジェクトには、'constructor'プロパティが設定されます。'constructor'プロパティは、生成されたプロトタイプオブジェクトのコンストラクタ関数を参照します。


コンストラクタ関数は、オブジェクトのクラスを定義します。ですから、クラスの'prototype'に設定された'constructor'の値は、クラスのコンストラクタ関数に等しくなります。

trace(Array.prototype.constructor == Array);
// 出力ウィンドウの結果
true

*注記
Flash 5では、等価演算子'=='で'function'同士を比較すると、つねに'true'を返すという問題があります。ですから、上記のスクリプトは、テストとして使用することができません。

ただし、他のクラスを'new'演算子で'prototype'に設定して継承すると、プロトタイプオブジェクトが上書きされ、'prototype'の'constructor'プロパティも書替えられます。

function Parent() {
}
function Child() {
}
Child.prototype = new Parent();
trace(Child.prototype.constructor == Child); // 出力: false
trace(Child.prototype.constructor == Parent); // 出力: true

もっとも、オブジェクト(インスタンス)の'consturctor'プロパティは、オブジェクトを直接生成したコンストラクタ関数を参照します。なお、この実装は、JavaScriptとは異なっています。

function Parent() {
}
function Child() {
}
Child.prototype = new Parent();
oChild = new Child();
trace(oChild.constructor == Child); // 出力: true
trace(oChild.constructor == Parent); // 出力: false
trace(oChild.__proto__.constructor == Parent); // 出力: true

Player
Flash Player 5以降。

関連項目
Function.prototype  Object.__proto__

参考文献
Colin MoockActionScript: The Definitive Guide』O'REILLY
David Flanagan『JavaScript第3版』オライリー・ジャパン

_____

作成者: 野中文雄
作成日: 2003年1月4日


Copyright © 2001-2006 Fumio Nonaka.  All rights reserved.