JAvascript面接問題jsにおけるthisキーワードの使い方
4054 ワード
これはJavascript言語のキーワードです.関数の実行時に自動的に生成される内部オブジェクトを表し、関数の内部でのみ使用できます.例:
関数の使用状況によってthisの値が変化します.しかし、関数を呼び出すオブジェクトを指す全体的な原則があります.
次は4つの状況に分けて、thisの使い方を詳しく議論します.
ケース1:関数呼び出しこれは関数の最も一般的な使い方であり、グローバル呼び出しに属するため、thisはグローバルオブジェクトGlobalを表します.次のコードを見てください.その実行結果は1です.
これがグローバルオブジェクトであることを証明するために、コードをいくつか変更しました.
実行結果は1です.もう一度変更します.
ケース2:オブジェクトメソッドとしての呼び出し関数は、あるオブジェクトのメソッドとして呼び出すこともできます.この場合、thisはこの親オブジェクトを指します.
ケース3は,コンストラクション関数としていわゆるコンストラクション関数を呼び出し,この関数によって新しいオブジェクト(object)を生成する.この場合、thisはこの新しいオブジェクトを指します.
実行結果は1です.この場合thisがグローバルオブジェクトではないことを示すために、コードをいくつか変更します.
実行結果は2であり,グローバル変数xの値はまったく変化していないことを示した.
場合4 apply呼び出しapply()は関数オブジェクトの1つの方法であり、その役割は関数の呼び出しオブジェクトを変更することであり、その最初のパラメータは変更後の呼び出しこの関数のオブジェクトを表す.したがって、thisはこの最初のパラメータを指します.
apply()のパラメータが空の場合、デフォルトではグローバルオブジェクトが呼び出されます.したがって,この場合の実行結果は0であり,thisがグローバルオブジェクトを指すことを証明する.最後の行のコードを
実行結果が1になり、このときthisがオブジェクトを表していることを証明しましたo
function test() {
this.x = 1;
}
関数の使用状況によってthisの値が変化します.しかし、関数を呼び出すオブジェクトを指す全体的な原則があります.
次は4つの状況に分けて、thisの使い方を詳しく議論します.
ケース1:関数呼び出しこれは関数の最も一般的な使い方であり、グローバル呼び出しに属するため、thisはグローバルオブジェクトGlobalを表します.次のコードを見てください.その実行結果は1です.
test() {
this.x = 1;
alert(this.x);
}
test(); // 1
これがグローバルオブジェクトであることを証明するために、コードをいくつか変更しました.
var x = 1;
function test() {
alert(this.x);
}
test(); // 1
実行結果は1です.もう一度変更します.
var x = 1;
function test() {
this.x = 0;
}
test();
alert(x); //0
ケース2:オブジェクトメソッドとしての呼び出し関数は、あるオブジェクトのメソッドとして呼び出すこともできます.この場合、thisはこの親オブジェクトを指します.
function test() {
alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m(); // 1
ケース3は,コンストラクション関数としていわゆるコンストラクション関数を呼び出し,この関数によって新しいオブジェクト(object)を生成する.この場合、thisはこの新しいオブジェクトを指します.
function test() {
this.x = 1;
}
var o = new test();
alert(o.x); // 1
実行結果は1です.この場合thisがグローバルオブジェクトではないことを示すために、コードをいくつか変更します.
var x = 2;
function test() {
this.x = 1;
}
var o = new test();
alert(x); //2
実行結果は2であり,グローバル変数xの値はまったく変化していないことを示した.
場合4 apply呼び出しapply()は関数オブジェクトの1つの方法であり、その役割は関数の呼び出しオブジェクトを変更することであり、その最初のパラメータは変更後の呼び出しこの関数のオブジェクトを表す.したがって、thisはこの最初のパラメータを指します.
var x = 0;
function test() {
alert(this.x);
}
var o = {};
o.x = 1;
o.m = test;
o.m.apply(); //0
apply()のパラメータが空の場合、デフォルトではグローバルオブジェクトが呼び出されます.したがって,この場合の実行結果は0であり,thisがグローバルオブジェクトを指すことを証明する.最後の行のコードを
o.m.apply(o); //1
実行結果が1になり、このときthisがオブジェクトを表していることを証明しましたo