ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript: 新しい関数と関数を直接呼び出すことの違いの分析_JavaScript スキル

JavaScript: 新しい関数と関数を直接呼び出すことの違いの分析_JavaScript スキル

WBOY
WBOYオリジナル
2016-05-16 17:29:191025ブラウズ
コードをコピー コードは次のとおりです。

function Test() {
this.name = 'テスト' ;
return function() { return true; }

var test = new Test();
それはテストオブジェクトですか?間違っている!ここで、test は関数 - function() { return true } で返されます。このとき、 new Test() は Test() と等価です。 new Test() == Test() を使用して両者が等しいかどうかを判定すると false が返されます。関数によるオブジェクト比較の Javascript は参照に基づいているためです。
上記の状況で 2 つの違いをより明確に区別するために、引き続き次のコードを見てください:

コードをコピー コードは次のとおりです:
function Test() {
this.name = 'Test';
return 'Test'; var fnT = Test();
var newT = new Test();


明らかに、fnT は文字列 Test ですが、newT はどうでしょうか。はは、最初の例を見て混乱しましたか?実際、現時点では newT は Test オブジェクトです。これには、値が文字列 Test である name という名前のプロパティがあります。
上記の 2 つのコードから、関数の戻り値が従来の意味での値型 (数値、文字列、ブール値) である場合、新しい関数は関数のインスタンス オブジェクトを返すと推測できます。そして if 関数が参照型 (オブジェクト、配列、関数) を返す場合、新しい関数は関数を直接呼び出した場合と同じ結果を生成します。これは、Test 関数でさまざまなタイプの値を返すテストによって確認できます。
この点を区別することは実際には非常に重要であり、少なくともオブジェクト指向フレームワークのクラス ライブラリ コードを見るときに混乱が少なくなります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。