jsの中のthis
4253 ワード
js中のthis(6週目)
thisは多くのプログラミング言語のキーワードです.JavaScriptでは、一般的にthis:thisの指向は関数定義の時には確定できません.関数実行時にのみ、thisが誰を指しているのかを確認できます.実際には、thisの最終的な方向はその呼び出しの対象です.
thisが指す場合、関数の呼び出しの仕方によっては、どのようなものがありますか?は、関数名()によって直接呼び出された:thisは、window を指す.オブジェクト・関数名()によって呼び出された:thisはこのオブジェクトを指す; 関数は、配列の要素として、配列下で呼び出された:thisは、この配列 を指す.関数がwindow内蔵関数のコールバック関数として呼び出された時:thisはwindow.setTimeout(func,Xms)を指します.set Interval(func,Xms)などの 関数を構成関数として、newキーワードで呼び出す場合:thisはnewからの新しいオブジェクト を指します.関数で指定し、appy()\call()\bind()でthis を指定します.矢印関数のthis問題は、実行時のthisではなく定義時のthisを指します.
1.関数名()で直接呼び出す:thisはwindowを指します. シーン1(関数名ダイレクトコール)
2.オブジェクト・関数名()で呼び出した:thisはこのオブジェクトを指します.シーン二(オブジェクト・関数名呼び出し) シーン3(オブジェクト・オブジェクト・関数名コール) シーン4(関数名直接呼び出し変数)
3.関数は配列の要素として、配列下で呼び出されました.thisはこの配列を指します.シーン5(配列下付きコール) シーン六(window内蔵関数コール) シーン7(構造関数としてnewキーワードコール)
6.関数で指定し、appy()\call()\bind()でthisを指定します.シーン8(関数でthisを指定)
矢印関数のthisは、次の分析では、20180901では広く発揮されませんでした.
thisは多くのプログラミング言語のキーワードです.JavaScriptでは、一般的にthis:thisの指向は関数定義の時には確定できません.関数実行時にのみ、thisが誰を指しているのかを確認できます.実際には、thisの最終的な方向はその呼び出しの対象です.
thisが指す場合、関数の呼び出しの仕方によっては、どのようなものがありますか?
1.関数名()で直接呼び出す:thisはwindowを指します.
function myobj(){
var myname = " ";
console.log(this);
console.log(this.myname);
}
myobj();// window.myobj();
関数実行中にthisが指すのは関数自体ではなく、そのオブジェクトを呼び出すことです.ブラウザのグローバル変数はwindowなので、ここのthisはwindowを指します.もちろんwindow.mynmmeはundifinedです.2.オブジェクト・関数名()で呼び出した:thisはこのオブジェクトを指します.
var myname = " window name";
function myobj(){
var myname = " ";
console.log(this);
console.log(this.myname);
}
var a = {
fun:myobj, // myobj a.fun
myname:" a name"
};
myobj();
a.fun();
直接mybjを呼び出します実はwindow.mybbojですから、mybbojを呼び出すのはグローバルwindowです.ここのthisはwindowを指します.mybjをaオブジェクトのfun属性に割り当てた後、a.fun()を呼び出します.つまり、aはmyboj()を呼び出します.だから、thisはaを指します. var myname = " window name"
function myobj(){
var myname = " ";
console.log(this);
console.log(this.myname);
}
var a = {
myname:" a name",
fun:myobj,
b:{
myname:" b name",
fun:myobj
}
}
myobj();
a.fun();
a.b.fun();
ここでは何も言うことはありません.オブジェクトがマルチレベルネスティングされています.thisはそのオブジェクトを呼び出します.すなわち、関数の前のレベルのオブジェクトです. var myname = " window name";
function myobj(){
var myname = " ";
console.log(this);
console.log(this.myname);
}
var a = {
fun:myobj, // myobj a.fun
myname:" a name"
};
a.fun();
var b = a.fun;
b();
ここの現象はおかしいようです.私の個人的な理解方法は下の図を見てください.3.関数は配列の要素として、配列下で呼び出されました.thisはこの配列を指します.
var myname = " window name";
function myobj(){
var myname = " ";
console.log(this);
console.log(this.myname);
console.log(this[0].myname);// 0 myname
}
var myarr = [{myname:" myarr[0] name"},myobj];//
myarr.myname = " myarr name";// myname
myarr[1]();//
4.関数がwindow内蔵関数のコールバック関数として使用される場合:thisはwindow.setTimeout(func,Xms)を指す.set Interval(func,Xms)などvar myname = " window name";
function myobj(){
var myname = " ";
console.log(this);
console.log(this.myname);
}
setTimeout(() => {
myobj();
}, 1000);
5.関数を構造関数として、newキーワードで呼び出す時:thisはnewからの新しいオブジェクトを指します.var myname = " window name";
function Myobj(){ //
this.myname = " ";
console.log(this);
console.log(this.myname);
}
var mobj = new Myobj();
関数がreturnと書かれていない場合、システムは黙々と関数の最後にreturn undefinedを追加します.newキーワードの呼び出し関数は、return undefinedを無視します.(自分で書いたreturn undefinedも無視されます.)newキーワードの呼び出しはreturnを書いていません.(またはreturn undefinedと書いています.)関数は関数の最後に黙々としてreturn thisを入れます.6.関数で指定し、appy()\call()\bind()でthisを指定します.
var myname = " window name";
function myobj(){
var myname = " ";
console.log(this);
console.log(this.myname);
}
var a = {
myname:" a name"
};
myobj.apply(a);
7.矢印関数のthis問題は、実行時のthisではなく定義時のthisを指します.矢印関数のthisは、次の分析では、20180901では広く発揮されませんでした.