Javascript_ this(1)
9913 ワード
Javascript_ this
JavaScriptでは、他の言語とは異なり、どこでも使用できます.関数とオブジェクト(メソッド)の区切りは緩やかですが、この区切りで区切ります.
デフォルトでは、関数を呼び出すときに決定されます.
グローバルスペースのthis
console.log(this) //window {...}
グローバルスペースで呼び出すと、ウィンドウオブジェクトが表示されます.JavaScriptグローバルスペースで変数を宣言すると、その変数はウィンドウオブジェクト(nodejs環境ではグローバル)に割り当てられます.
メソッド内部のthis
関数を実行するために、関数として呼び出される場合もあれば、メソッドとして呼び出される場合もあります.二人の唯一の違いは独立性があることだ.名前の通り、関数自体は独立した機能を実行し、メソッドは呼び出したターゲットオブジェクトに関連する操作を実行します.
を選択します.
let func = function(x) {
console.log(this, x);
}
func(1); // window {...}
let obj = {
method : func
};
obj.method(2); // {method : f}
obj['method'](2); // {method :f}
メソッドthisを呼び出すと、対応するメソッドが表示されます.呼び出しオブジェクトなのでobj["method"]のようにできます.
関数として呼び出されたときの関数内部のthis
関数として関数を呼び出す場合は、thisは指定されません.これには、呼び出しボディに関する情報が含まれている必要があります.ただし,関数呼び出しは直接実行され,オブジェクトが指定されていないため不明である.
let obj = {
outer : function() {
console.log(this); // 1
let innerFunc = function(){
console.log(this); // 2, 3
}
innerfunc()
let obj2 = {
innerMethod : innerFunc
};
obj.innerMethod();
}
};
obj1.outer()
1番コンソールlogはobj 1です.outer関数を呼び出すときはouterの前にあります.メソッドで呼び出されるのでobj 1が呼び出されます.2番コンソールlogはinnerfunc()によって呼び出されます.ないので、関数として呼び出すのでwindowを呼び出します.
3番コンソールログはobjです.innerMethod()によって呼び出されます.obj 2の呼び出しがメソッド呼び出しの原因
グローバルオブジェクトをバインドしないで、周囲の環境のオブジェクトを継承して使用します。
ES 5以前の構文
let obj = {
outer : function() {
console.log(this); // 1
let innerFunc = function(){
console.log(this); // 2
}
innerfunc()
let self = this; // 추가!
let innerFunc2 = function() {
console.log(self); // 3
}
};
obj1.outer()
//1はobj、//2はwindow//3はobjArrow functionは、ES 6におけるこのグローバルオブジェクトビューの問題を解決するために使用される
本当に解決したいのか分からないけど解決した
let obj = {
outer: function(){
console.log(this);
let innerFunc = () => {
console.log(this);
};
innerFunc();
}
};
obj.outer()
矢印関数として使用する場合はconsole.両方のlogに{outer:f}が表示されます.Reference
この問題について(Javascript_ this(1)), 我々は、より多くの情報をここで見つけました https://velog.io/@joo0/Javascript-this1テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol