« javaScript 関数オブジェクト prototype | トップページ | javaScript []によるプロパティへのアクセス »

2011年3月 2日 (水)

javaScript constructorプロパティ

//constructerプロパティを持つものは何か

function F() { this.name = 'taro'; }

var o = new F();

//何がconstructerプロパティを持っているのか

console.log(a.constructor); //function Object() ...
console.log(F.constructor); //function Function() ...
console.log(F.prototype.constructor); //function F() {this.name='taro';}
console.log(o.constructor); //function F() {this.name='taro';}

//全部持ってるんですね。

//プリミティブ型は持ってないはず

var i = 0;
var s = 'a';
var u; //undefined

console.log(i.constructor); //function Number() ...
console.log(s.constructor); //function String() ...
//console.log(u.constructor); //ERROR

//あれ、i,sも持ってることになってる。
//プロパティにアクセスしたことで、一時的にNumber,Stringオブジェクトに
//型変換されたんでしょう

//constructerプロパティは、関数オブジェクトなので、
//それを使って新しいオブジェクトを作れるはずです。

var o2 = new F.prototype.constructor();

console.log(o2.name); //taro

//作れました。

//下の2つは同じオブジェクト?
console.log(F.prototype.constructor == o.constructor); //true
console.log(a.constructor == b.constructor); //true

//同じでした。

//自前で持ってる?
console.log(F.prototype.hasOwnProperty('constructor')); //true
console.log(o.hasOwnProperty('constructor')); //false
console.log(a.hasOwnProperty('constructor')); //false

//インスタンスのconstructorは、プロトタイプチェーンで与えられるようです。

//constructorは、代入可能なので、上書きして破壊してみます。
function F2(){ this.name = 'jiro';}
F2.prototype.constructor = 100;
var o3 = new F2();
console.log(o3.name); //jiro
console.log(o3.constructor); //100

//継承の実験

function Parent() {this.name = 'saburo';}
function Child() {}

Child.prototype = new Parent();

var child = new Child();
console.log(child.name); //saburo
console.log(child.constructor); //function Parent() ...

//prototypeの代入による継承は、constructorが変になるみたい。
//(newしたのはChildなのに、constructorは、Parentになってる)

|

« javaScript 関数オブジェクト prototype | トップページ | javaScript []によるプロパティへのアクセス »

javaScript」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1049865/39081512

この記事へのトラックバック一覧です: javaScript constructorプロパティ:

« javaScript 関数オブジェクト prototype | トップページ | javaScript []によるプロパティへのアクセス »