JavascriptにもJavaと同様にnewという演算子で、 インスタンスを生成できる。

ただし、Javaの感覚で使っていると どうも正しい理解につながらないと感じ、 JavaScriptのnew 演算子とできるだけ同じ動作をするように 自作new関数を作ってみた。

まずは、new演算子って何が行われるの?

  • Objectクラスのインスタンスを生成し、
  • そのオブジェクトをレシーバーにし、クラス定義関数を適用する。
  • constractorプロパティを置き換える
↑これが今の自分の理解です。(多分足りないけど)

で、以下がそれに忠実に作ってみた 自作new関数です。

// 自作 new関数
function new( cf )
{
   var obj = {};
   cf.call( obj );
   obj.constractor = cf;
   return obj;
}
こんな感じ。

使ってみる。

// Docクラスを生成
function Doc()
{
 this.name = "pochi";
}
Doc.prototype.call = function(){ alert( this.name ) };

// 標準の方法でインスタンス生成
var doc_obj = new Doc();

// 自作new関数でインスタンス生成
var my_doc_obj = new( Doc );
標準の方法と、自作newの二通りの方法でインスタンスを生成。

呼び出してみる。

doc_obj.call();
my_doc_obj.call();
"pochi"が無事アラートされてます。
とりあえず、まずは感じ。

全然足りないとは思うけど、 雰囲気はつかめるかな もうちょい勉強してみよ。