今回のテーマは、【関数とobject】です。
これは、javascriptでは、
function Nin(){ }というのがあったときに、
Nin();とすれば当然呼べます。関数ですから。 でも、
var n1 = new Nin()とかいても呼べます。
これは正確には、コンストラクタによる呼び出しらしいのですが、
あまり細かいことを気にせずいうと、【this】が違うということです。
だから、C++における、関数とクラスのメンバ関数の違いみたいなものです。
C++のクラスのメンバ関数は、中身としては通常の関数で、
その関数を呼ぶときの【this】が違うだけなのです。
ということで、テストコードを書いてみます。
var a; function Nin(){ a = this; } Nin(); assert(true,a); var n1 = new Nin(); assert(true,a); assert(a==n1,"a==n1みたいですよ!");で、結果は以下。
最初がWindowということは、関数呼び出しの場合にはthisがGlobalということです。
newでの呼び出しは、なんかObjectが生成されて、そこがthisになってるってことですね。 とうぜんthisになってるので、ここでメソッドやプロパティを追加したりとかが自由ってことです。
ただ、とくに違和感があるかっていうと、私的には特にないです。
なにしろ、C++において、mallocした領域をクラスのポインタでキャストして、
newしないでクラスのインスタンスを生成したような使い方をしたりしてたので(o^^o)
0 件のコメント:
コメントを投稿