TIL 94 l this part3
最後のまとめをする
1.グローバル空間でthisを呼び出す場合:グローバル空間ではthisが最初から呼び出されるため、その値は固定されます.ブラウザ>未亡人(windowというグローバルオブジェクト) node.js>global(globalと呼ばれるグローバルオブジェクト)
2.call()、apply()、bind()メソッド:明示的this binding call()メソッド:メソッド呼び出しの主体である関数を直ちに実行するコマンド. 関数を直接実行すると、グローバルオブジェクトが参照されますが、呼び出しメソッドでは、任意のオブジェクトを->明示的バインド として指定できます.
apply()メソッド:apply()メソッドはcallメソッドと機能的に全く同じです.しかし、applyメソッドの違いは、配列内の要素として2番目のパラメータを受信し、その配列内の要素の関数を呼び出すパラメータ として指定することである. bind()メソッド:callメソッドと同様ですが、すぐに呼び出すのではなく、受信したthisとパラメータに基づいて、新しい関数のみを返すメソッドです.すなわちbindメソッドには,この機能を関数に予め適用することと,一部の応用関数を実現することの2つの目的がある.
1.関数を呼び出すとき:関数を呼び出すとき、関数の内部でどのようなことが起こりますか.
(1)ES 5:関数のthisは常にグローバルオブジェクトを指します(覚えておいてください)グローバル関数ではなくネストされた関数が呼び出された場合、関数のこの項目はグローバルオブジェクトにバインドされます->エラーとの見方もあり、ES 6に矢印関数を追加することで を改善した.矢印関数:ES 5の異議を収集することによって矢印関数を追加し、ES 6が関数の宣言を開始すると、この関数にバインドするオブジェクトが静的に決定されます.
矢印関数のthisは、関数呼び出しによって決定される動的関数ではなく、常に親のthisを指します.これをLexicalthisといいます. 2.メソッドの呼び出し時:メソッド名の前に、呼び出しメソッドのマスターを表示します.メソッド名の「点」の前の子がthisです. b:あるオブジェクトに関連付けられた関数であるため、「メソッド」 となる点は、 を括弧で表すこともできる.ジェネレータ関数に基づくコンテンツ作成インスタンスオブジェクト=>この場合、新しく作成されたインスタンスオブジェクト自体がそうである:
この値が確定した場合
せいち
1.グローバル空間でthisを呼び出す場合:グローバル空間ではthisが最初から呼び出されるため、その値は固定されます.
let func = function(a, b, c) {
console.log(this, a, b, c);
}
func(1, 2, 3); // window{..} 1 2 3
func.call({ x : 1 }, 4, 5, 6 ); // {x: 1} 4 5 6
func.call({ x: 1, y:2}, 6, 7, 8);
let func = function(a, b, c) {
console.log(this, a, b, c);
}
func.apply({x:1}, [4, 5, 6]); // {x: 1} 4 5 6
let func = function (a, b, c, d) {
console.log(this, a, b, c, d);
};
func(1, 2, 3, 4); // Window {…} 1 2 3 4
let bindFunc1 = func.bind({ x: 1 });
bindFunc1(5, 6, 7, 8); // {x: 1} 5 6 7 8
let bindFunc2 = func.bind({ x: 1 }, 4, 5);
bindFunc2(9, 10); // {x: 1} 4 5 9 10
へんどうち
1.関数を呼び出すとき:関数を呼び出すとき、関数の内部でどのようなことが起こりますか.
(1)ES 5:関数のthisは常にグローバルオブジェクトを指します(覚えておいてください)
function a () {
console.log(this);
}
a(); // window
>> 함수 a()을 호출하는 순간에 전역공간에서 호출한 것이다.
누가 호출한 것? 호출한 대상이 전역객체가 되는 것.
function b () {
console.log(this);
function c () {
console.log(this);
}
c(); >> 호출한 주체가 b()일 것 같은데, c()도 값이 전역 객체로 출력된다.
}
b(); // window, window
let d = {
e : function() {
function f() {
console.log(this);
}
f(); // window (함수로써 호출했기 때문에 전역객체)
}
}
d.e();
>>>
(2) ES6 : arrow funcion 矢印関数のthisは、関数呼び出しによって決定される動的関数ではなく、常に親のthisを指します.これをLexicalthisといいます.
let a = {
b : function() {
console.log(this);
}
}
a.b();
> a : this
b() : 메서드
let a = {
b : {
c : function() {
console.log(this);
}
}
}
a.b.c();
> a.b : this
c() : 메서드
obj.func();
obj['func']();
person.info.getName();
person.info['getName']();
person['info'].getName();
person['info']['getName']();
3.コンストラクション関数を呼び出す場合(new演算子を使用する場合)
function Person(n, a) {
this.name = n;
this.age = a;
}
let roy = Person('재남', 30);
console.log(window.name, window.age); // 재남 30
-> new 연산자 없이 함수로 Person을 출력하면 전역객체.name, 전역객체.age
let roy = new Person('재남', 30);
console.log(roy);
-> new를 넣은 채로 호출하면 생성자 함수로서 호출한 거니까 roy라고 하는 이 변수 새로 생성될 person의 인스턴스 객체자신이 this가 되니까 this.name에 재남, this.age 30
Reference
この問題について(TIL 94 l this part3), 我々は、より多くの情報をここで見つけました https://velog.io/@yeonbee/TIL-94-l-this-part3テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol