今回のテーマは、【関数と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 件のコメント:
コメントを投稿