JavaScriptのnewの知られざる2番目の使い方

JavaScriptのnewの知られざる2番目の使い方:

あまり良いタイトルではないですが

2つの使い方があるよ、という話です。

this についてここ(JavaScriptのthis(コンテキスト)とは?)で書いたのですが、

そういえば this の話なのに new にあまり触れてなかったなと気づいた流れで、

new といえばそういえば2通りの使い方があるなということで書いてみました。


new の2通りの使い方。

var a = new function(){ // 使い方:1つ目 
  this.x = 'x1'; 
  this.y = 'y1'; 
}; 
 
var b = new function(){ // 使い方:2つ目 
  var that = {}; 
  that.x = 'x2'; 
  that.y = 'y2'; 
  return that; 
}; 
 
console.log( a.x, a.y ); // x1,y1 
console.log( b.x, b.y ); // x2,y2 
newで関数を実行した際にその中で、

・object(hash) を return した場合にはそれ自体が new の戻り値として返り、( ↑で書いた "2つ目")

・それ以外は [何かしら] が返ってきます。 ( ↑で書いた "1つ目")

この [何かしら] は内部的には this としてアクセスできて、外部的にはそれを代入した変数 a からアクセスできます。

a も b も外からアクセスする分には同じ動きをします。

var c = (function(){ 
  var that = {}; 
  that.x = 'x3'; 
  that.y = 'y3'; 
  return that; 
}()); 
この c も同様の動きです。(new 使った例ではないですが)


で、「何が違うんだ?」とか「どう使い分ける?」

とかですが、b,c は全く同じなのでどちらでもいい思います。(私は c の書き方をよく使う)

結局のところ単に object(hash) を返しているだけです。

何か初期化の処理をしたいな~とかいう場合に使ってます。

a は b,c っぽい [何かしら] が返ってきますが、[何かしら] 特有の機能が付与されているというだけの違いです。

特有の機能とは以下の暗黙のプロパティ2つに関しての話です。

[何かしら].prototype

[何かしら].constructor

b,c にもこれはあるんですけど、b,c は親の扶養家族みたいなもので、

a の new は独り立ちして一軒家を作る場合に使う、という感じです。

一軒家の話は長くなるのと、とりあえず new のこの2つについて書きたかったのでここまでで。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)