Core > コンンストラクタ
by s_hiroshi
JavaScript
// printの実装
var print = console.log;
// コンストラクタ(関数オブジェクト)名_Fはデバック用に設定
var F = function _F(value) {
this.name = value;
};
// プロトタイプオブジェクトにメソッドを設定
F.prototype.showName = function() {
return this.name;
};
// インスタンス作成
// 関数オブジェクトからnew演算子で作成したオブジェクトをインスタンスと呼ぶ
var ins1 = new F('ins1');
print(ins1.showName()); // ins1
// インスタンスのconstructorプロパティは
// 生成に用いた関数オブジェクト
print(ins1.constructor); // _F(value)
// 関数オブジェクトはコンストラクタとして利用される可能性があるため
// 自身をprototype.constoructorへ設定する
print(F.prototype.constructor); // _F(value)
// new Objectで生成されたインスタンスのconstructorプロパティはObject()
// Object.prototype.constructorはObject()
var o1 = new Object();
print(o1.constructor); // Object()
print(Object.prototype.constructor); // Object()
// オブジェクトリテラルはnew Object()のショートカット
var o2 = {} // Object()
print(o2.constructor);
// 配列の場合はnew Arrayで作成しても
// arr.constructorはArray()ではなくundefined
var arr = new Array('a', 'b', 'c');
print(arr.constructor); // undefined
print(arr[1]); // b
print(typeof arr); // object