[JavaScript]このバインディング
13656 ワード
🚽 皆さんも気持ちの良い姿勢で読んでほしいです私もそう書きました
🙏🏻 私が理解するように書きました.間違った内容があったら私の気持ちを考えずに正しい知識をコメントで教えてくれればいいのに
デフォルトでは、呼び出し汎用関数 呼び出し方法 呼び出しコンストラクタ 関数呼び出しに基づいてこのアイテムをバインド
💡 関数が通常の関数として呼び出されると、常に
メソッド内のネスト関数でも、これは同じです.
👉 関数をどこから呼び出しても、呼び出しが通常の関数の場合、windowオブジェクトを無条件にバインドします.
メソッド呼び出し
💡 関数が呼び出された場合、このメソッドは
🍯 理解TIP
サッカーをしていると思ってください.
説明するのは以下の通りです. メソッドの 理解を助けるために「this do variant」という観点から「reference」という言葉が使われていますが、これは一般変数とは多少違います.
コンストラクタの呼び出し
💡 関数がコンストラクション関数として呼び出されると、バインド
コンストラクション関数は、同じ構造インスタンスを作成するテンプレートと同じです.快適な貼り付け対象と考えればいいだけです.似たようなものは
片付けてください. thisバインドされたオブジェクトは、関数の呼び出し方法に依存します. 一般関数の呼び出し
👉 メソッド呼び出し
👉 コンストラクタの呼び出し
👉
🙏🏻 私が理解するように書きました.間違った内容があったら私の気持ちを考えずに正しい知識をコメントで教えてくれればいいのに
this
は自己参照変数です.'は自分の変数を参照し、ここで「自分」は対象を指す.デフォルトでは、
전역 객체 window
がバインドされ、関数呼び出しに応じて異なるオブジェクトがバインドされます.javascriptは関数を呼び出す方法が多いが、この文章では(主に使用されている)以下の3つの方法しかチェックしない.const foo = function () {
console.dir(this)
}
/**
* 일반 함수 호출
* 전역 객체 window 바인딩
*/
foo() // window
/**
* 메서드 호출
* 메서드를 호출한 object 객체 바인딩
*/
const object = { method: foo }
object.method() // { method: [Function: foo] }
/**
* 생성자 함수 호출
* 생성자 함수가 생성할 객체(인스턴스) 바인딩
*/
new foo() // foo {}
一般関数の呼び出し💡 関数が通常の関数として呼び出されると、常に
전역 객체 window
がバインドされます.メソッド内のネスト関数でも、これは同じです.
const object = {
method: function () {
function bar() {
console.dir(this)
}
bar() // 메서드 내 중첩 함수를 일반 함수로 호출
}
}
object.method() // window
bar()
関数はメソッド内のネストされた関数として宣言され、通常の関数として呼び出される.👉 関数をどこから呼び出しても、呼び出しが通常の関数の場合、windowオブジェクトを無条件にバインドします.
メソッド呼び出し
💡 関数が呼び出された場合、このメソッドは
메서드를 호출한 객체
をバインドします.const objectA = {
name: 'A',
method: function () {
return this.name
}
}
console.log(objectA.method()) // A
const objectB = {
name: 'B'
}
objectB.method = objectA.method // 메서드 할당
console.log(objectB.method()) // B
objectB
メソッドを割り当てて呼び出すと、コード実行結果が変化します.この角度から見ると、持ち方(?)進行中のオブジェクトは意味がありません.誰が作成したとしても、thisは呼び出しメソッドのオブジェクトをバインドします.🍯 理解TIP
サッカーをしていると思ってください.
const 축구선수 = {
볼점유율: '50%',
축구공: function() {
return this.볼점유율
}
}
// 축구선수가 드리블 하고 있다.
console.log(축구선수.축구공()) // 50%
仮定objectA
オブジェクト呼び出し축구선수
メソッド.サッカーの方法はサッカー選手のボールシェアを返還する.const 손흥민 = {
볼점유율: '80%',
축구공: function() {
return this.볼점유율
}
}
// 손흥민 선수가 드리블 하고 있다.
console.log(손흥민.축구공()) // 80%
// 박지성 선수 등장
const 박지성 = {
볼점유율: '85%'
}
박지성.축구공 = 손흥민.축구공 // 박지성에게 패스!⚽️
// 박지성 선수가 손흥민 선수에게 공을 넘겨받아 드리블 하고 있다.
console.log(박지성.축구공()) // 85%
孫興民がボールを持っている時は孫興民のボール占有率、朴智星がボールを持っている時は朴智星のボール占有率.つまり、サッカーは今ドリブルしている選手にとって意味があるということです.説明するのは以下の通りです.
축구공()
関数をメソッド축구공()
メソッドを宣言するオブジェクトではなく、呼び出されたオブジェクトを参照します.コンストラクタの呼び出し
💡 関数がコンストラクション関数として呼び出されると、バインド
this
が呼び出されます.function Person(name, age) {
this.name = name;
this.age = age;
this.introduce = function () {
return `안녕하세요. 제 이름은 ${this.name}이고, 나이는 ${this.age}살 입니다.`;
};
console.dir(this); // Person { name: 'bico', age: 29, introduce: [Function] }
}
const me = new Person("bico", 29);
console.log(me.introduce()); // 안녕하세요. 제 이름은 bico이고, 나이는 29살 입니다.
コンストラクション関数は、実行時まで黙って空のオブジェクトを作成し、このオブジェクトにバインドします.このオブジェクトは생성자 함수가 생성하게 될 객체(인스턴스)
と呼ばれます.コンストラクション関数は、同じ構造インスタンスを作成するテンプレートと同じです.快適な貼り付け対象と考えればいいだけです.似たようなものは
인스턴스
で、このボリュームはとても大きくて、次は...(これはCSSレベルとは全く関係ないので、発表者の皆さんに注意してもらいたいのですが...射手さんにCSSかどうかを聞き始めたばかりで、軽蔑されました.)片付けてください.
클래스(Class)
|常にオブジェクトを参照します.👉
this
バインド.どこから呼び出しても、通常の関数を呼び出すとwindow!👉
window 전역 객체
バインド.メソッドを宣言したオブジェクトは、この立場にとって何の意味もありません.👉
메서드를 호출한 객체
バインド.バインド時間が実行時よりも早いため、作成する正確な表現は使用されますが、作成されたオブジェクトのみと理解できます.仕事には影響ないようです.Reference
この問題について([JavaScript]このバインディング), 我々は、より多くの情報をここで見つけました https://velog.io/@bico/thisBinding.jsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol