グローバル範囲の下
これ;
これをグローバル範囲で使用する場合、グローバルオブジェクトを指します。
グローバルオブジェクトの詳細な紹介は次のとおりです。
グローバルオブジェクトは、実行コンテキストを入力する前に作成されたオブジェクトです。
このオブジェクトには1つのコピーのみがあり、そのプロパティにプログラムのどこにでもアクセスできます。グローバルオブジェクトのライフサイクルは、プログラムが終了する瞬間に終了します。
グローバルオブジェクトの初期作成段階では、数学、文字列、日付、parseintは独自の属性として初期化され、他の追加オブジェクトも属性(グローバルオブジェクト自体を指すことができます)として作成できます。たとえば、DOMでは、グローバルオブジェクトのウィンドウプロパティは、グローバルオブジェクト自体を参照できます。
したがって、コンソールのWindowと同じです。
関数を呼び出すとき
foo();
ここでは、これはグローバルオブジェクトも指しています。
メソッドを呼び出すとき
test.foo();
この例では、これはテストオブジェクトを指します。
コンストラクターを呼び出すとき
new foo();
コンストラクターと呼ばれる、呼び出されたときに新しいキーワードがnegで使用されます。この時点で、関数内で、これは新しく作成されたオブジェクトを指します。
明示的に設定するとき
関数foo(a、b、c){} // var bar = {}; foo.apply(bar、[1、2、3]); //配列はdowerfoo.call(bar、1、2、3)に展開します。 // a = 1、b = 2、c = 3function.prototypeの適用方法と呼び出し方法を使用する場合、この値はメソッドの最初のパラメーターに明示的に設定されます。
したがって、関数を呼び出すときのルールとは異なり、これは上記の例でバーを指します。
ここに通話と適用方法があります。
通話方法:
構文:call([thisobj [、arg1 [、arg2]]]]]])
定義:オブジェクトのメソッドを呼び出して、現在のオブジェクトを別のオブジェクトに置き換えます。
適用方法:
構文:apply([thisobj [、argarray]])
定義:特定のオブジェクトの1つの方法を適用し、現在のオブジェクトを別のオブジェクトに置き換えます。
ここでは、オブジェクトが文字通り宣言されたときにオブジェクト自体を指すために使用できないことに注意する必要があります。次のように:
var obj = {me:this}ここでは、これはOBJを指し示すことはなく、これの適用は上記の5つの状況に限定されます。
要約します
上記の状況はほとんど意味がありますが、これは2番目のケース(つまり、関数を呼び出すとき)では実際にはほとんど役立ちません。これはJavaScriptデザインの別のエラーと見なされます。
foo.method = function(){function test(){//これはグローバルオブジェクトに設定されています} test();}上で述べたように、これはFOO機能ではなく、グローバルオブジェクトを指します。
テストでFooを指す方法を得るには、Fooを指すメソッド内にローカル変数を作成する必要があります。
foo.method = function(){var that = this; function test(){//ここでこれを使用する} test();}これは通常の変数名ですが、この外部を指すためによく使用されます。
機能エイリアスに関連する別の興味深いものがあります。つまり、メソッドが変数に割り当てられている場合です。
var test = someobject.methodtest; test();
上記の例では、テストは通常の関数として扱われるため、2番目のケース(つまり、関数が呼び出されたとき)によれば、その内部はsomeObjectではなくグローバル変数を指します。
この遅い拘束力は最初は悪い決定のように思えますが、実際にはプロトタイプの継承の基礎です。
function foo(){} foo.prototype.method = function(){}; function bar(){} bar.prototype = foo.prototype; new bar()。method();この時点で、メソッドが呼び出されると、バーのインスタンスオブジェクトを指します。