JavaScriptは、機能プログラミング、閉鎖、プロトタイプベースの継承などの高度な機能をサポートするスクリプト言語です。JavaScriptは最初は簡単に開始できるようですが、深く使用すると、JavaScriptを習得することは実際には困難です。その中でも、JavaScriptのキーワードは比較的混乱する概念です。さまざまなシナリオでは、これは異なるオブジェクトになります。 JavaScriptでこのキーワードを正しく習得することによってのみ、JavaScript言語のしきい値を入力できるという見解があります。主流のオブジェクト指向言語(Java、C#など)では、これは明確かつ具体的な、つまり現在のオブジェクトを指すことを意味します。一般に、編集期間中に拘束されます。これは、JavaScriptのランタイム中にバインドされています。これが、このキーワードがJavaScriptに複数の意味を持つ重要な理由です。
ランタイム中のバインディング機能により、これはJavaScriptでのグローバルオブジェクト、現在のオブジェクト、または機能が完全に呼び出される方法に依存するオブジェクトである可能性があります。 JavaScriptに関数を呼び出す方法はいくつかあります。
オブジェクトメソッドと呼ばれます。
関数呼び出しとして;
コンストラクターと呼ばれます。
応用または電話をかけるために使用してください。
ことわざのように、キャラクターはフォームほど良くなく、フォームは写真ほど良くありません。これが指し示すJavaScriptを人々によりよく理解させるために?説明する写真は次のとおりです。
上の写真では、「JavaScript This Decision Tree」と呼びます(非厳格なモード)。以下は、この数字がこれを判断するのにどのように役立つかを説明する例です。
var point = {x:0、y:0、moveto:function(x、y){this.x = this.x + x; this.y = this.y + y; }}; //決定ツリー説明:point.moveto(1,1)関数は新規の呼び出されず、拒否権に入ります。 //これは現在のオブジェクト、つまりポイントオブジェクトにバインドされていますpoint.moveto関数呼び出しはnewと呼ばれていますか?これは明らかにそうではありません。 「いいえ」ブランチに入ると、つまり、関数はdot(。)で呼び出されますか? ;
point.moveto関数はdot(。)で呼び出されます。つまり、「はい」ブランチに入ります。つまり、ここでは、Point.movetoの前のオブジェクトポイントをポイントします。
図ポイントでこのポイントの分析図。Moveto関数を次の図に示します。
別の例を示しましょう。次のコードをご覧ください。
function func(x){this.x = x; } func(5); //これはグローバルオブジェクトウィンドウであり、xはグローバル変数//決定ツリー分析です:func()関数はnewで呼び出されますか?いいえ、func()関数を入力するときにDOTで呼ばれますか?いいえ、これはグローバルオブジェクトWindowxを指します。 // x => 5「JavaScript This Decision Tree」でFUNC()関数を決定するプロセスは次のとおりです。
func(5)関数呼び出しはnewで呼び出されますか?これは明らかにそうではありません。 「いいえ」ブランチに入ると、つまり、関数はdot(。)で呼び出されますか? ;
FUNC(5)関数はdot(。)で呼び出されません。つまり、「no」ブランチに入ります。つまり、このポイントはグローバル変数ウィンドウに、これは実際にはwindow.xです。
このFUNC関数が指すものの分析図は、次の図に示されています。
関数として直接呼び出す方法については、複雑な例を見てみましょう。
var point = {x:0、y:0、moveto:function(x、y){// innerfunction var movex = function(x){this.x = x; //これは何を指しますか?ウィンドウ}; //内部関数var movey = function(y){this.y = y; //これは何を指しますか?ウィンドウ}; movex(x); movey(y); }}; point.moveto(1,1); point.x; // => 0ポイント.y; // => 0 x; // => 1 y; // => 1movex()およびmovey()関数の実際の内部呼び出し。 「JavaScript This Decision Tree」のMoveX()関数内でこれを決定するプロセスは次のとおりです。
Movex(1)関数呼び出しはnewで呼び出されますか?これは明らかにそうではありません。 「いいえ」ブランチに入ると、つまり、関数はdot(。)で呼び出されますか? ;
movex(1)関数はdot(。)で呼び出されません。つまり、「no」ブランチに入ります。つまり、これはグローバル変数ウィンドウを指し、this.xは実際にはwindow.xです。
コンストラクターコールの例を見てみましょう。
関数ポイント(x、y){this.x = x; // これ ? this.y = y; // this?} var np = new Point(1,1); np.x; // 1var p = point(2,2); px; //エラー、Pは空のオブジェクト未定義Window.xです。 // 2ポイント(1,1)関数の「JavaScriptこの決定ツリー」でこれを決定するプロセスは次のとおりです。
var np = newは、ポイント(1,1)コールがnewで呼ばれていますか?これは明らかに、「はい」ブランチに入ることです。つまり、これはNPを指します。
次に、this.x = 1、つまりnp.x = 1;
var p = point(2,2)のポイント(2,2)関数の「JavaScriptこの決定ツリー」でこれを決定するプロセスは次のとおりです。
var p = point(2,2)コールはnewで呼び出されますか?これは明らかにそうではありません。 「いいえ」ブランチに入ると、つまり、関数はdot(。)で呼び出されますか? ;
ポイント(2,2)関数はdot(。)で呼び出されていませんか?いいえ、つまり、「no」ブランチを入力すると決定されます。つまり、これはグローバル変数ウィンドウを指し、this.xは実際にはwindow.xです。
this.x = 2はwindow.x = 2を意味します。
最後に、呼び出しを使用して関数を呼び出して適用する例を見てみましょう。
関数ポイント(x、y){this.x = x; this.y = y; this.moveto = function(x、y){this.x = x; this.y = y; }} var p1 = new Point(0、0); var p2 = {x:0、y:0}; p1.moveto.apply(p2、[10、10]); // applyは実際にはp2.moveto(10、10)p2.x // 10です「JavaScriptこの決定ツリー」の関数p1.moveto.apply(p2、[10,10])を決定するプロセスは次のとおりです。
2つの方法が適用され、呼び出しが非常に強力であり、関数実行のコンテキスト、つまりこれに結合したオブジェクトを切り替えることを可能にします。 p1.moveto.apply(p2、[10,10])は実際にはp2.moveto(10,10)です。その後、p2.moveto(10,10)は次のように解釈できます。
関数呼び出しはnewで呼び出されていますか?これは明らかにそうではありません。 「いいえ」ブランチに入ると、つまり、関数はdot(。)で呼び出されますか? ;
p2.moveto(10,10)関数はdot(。)で呼び出されます。つまり、「はい」ブランチに入ります。つまり、これはp2.moveto(10,10)のオブジェクトP2を指します。以前は、p2.x = 10。
JavaScript関数実行環境のプロセスに関して、IBM DeveloperWorks Document Libraryの説明は非常に優れており、抜粋は次のとおりです。
「JavaScriptの機能は、通常の関数として、またはオブジェクトとして実行できます。これがこれが非常に豊富な主な理由です。機能が実行されると、実行環境(実行コンテキスト)が作成され、この実行環境ですべての機能が発生します。変数の初期化されているのは、関数変数に対応する値です。そして、それらの操作は、実行環境(実行コントテキスト)が成功したときにのみ実行されます(executionContext)は正常に作成され、関数は行ごとに実行され始め、必要な変数は以前に構築された実行環境(executionContext)から読み取られます。
この一節を理解することは、JavaScript機能を理解することに大きな利益をもたらすでしょう。