call, apply, bind
4430 ワード
call,apply,bindの3つの方法の役割は類似している.
この3つの関数では、thisが特定のオブジェクトを参照できます.
func関数は、所属するオブジェクトにjobというプロファイルを設定し、「devloper」というテキストをこの値に渡します.
結果は私が言ったように.
最初のパラメータオブジェクトに加えて、callには伝達するパラメータが複数あります.
次にlogを使用してコンソールに値を表示します.
結果は.
2番目のパラメータから、関数の伝達パラメータとして使用できます.
callと同様にapplyとbindも同じ目的で使用される.
では、どんな違いがありますか.
以前、callは複数の伝達パラメータを関数に伝達することができ、最初の伝達パラメータはオブジェクトです.
実際、これはapplyにも適用されます.
しかしapplyは複数の伝達パラメータを1つずつ伝達するわけではない. 整列 彼らに一つ渡す
結果は.
結果は同じです.callとapplyの違いは,伝達パラメータが単一伝達なのか配列伝達なのかである.
call, apply vs. bind
使い捨て vs リサイクル
:callおよびapplyは、呼び出しのたびに最初のパラメータ値として渡されるオブジェクトに属する場合があります. (複数のオブジェクトに属することができます)
結果は.
関数を呼び出すたびに、最初のパラメータとして渡されるオブジェクトにpropertyと値が設定されていることがわかります.
bind!
ただしbindはパラメータとして渡されるオブジェクトを引き続き使用することができる.
結果は.
ljsでは設定されておらず、onwahでは設定されています.
これはbindedFuncがこの値をonwahとして永久に指定しているためです.
bindは永続的に指定されますが、applyとcallは呼び出すたびに指定する必要があります.
この3つの関数では、thisが特定のオブジェクトを参照できます.
1.常用
const func = function() {
this.job = 'developer';
};
関数func.new
キーワードを使用してインスタンスを作成しない限り、この関数のどこにも表示されません.const onwah = {
name: 'onwah'
}
call、apply、bindの効果を体験するオブジェクトを作成します.func.call(onwah);
console.log(onwah.job);
関数を呼び出すときはcall、bind、applyを使用します.パラメータは、関数が属するオブジェクトを渡します.func関数は、所属するオブジェクトにjobというプロファイルを設定し、「devloper」というテキストをこの値に渡します.
結果は私が言ったように.
2.非オブジェクト伝達パラメータ
最初のパラメータオブジェクトに加えて、callには伝達するパラメータが複数あります.
const func = function( age, height) {
this.job = 'developer';
this.age = age;
this.height = height;
};
関数funcを拡張しました.2つのパラメータが設定されています:ageとheight.func.call(onwah, 45, 197);
console.log(onwah.job);
console.log(onwah.age);
console.log(onwah.height);
オブジェクトonwahの後に追加のパラメータ45および197が渡される.次にlogを使用してコンソールに値を表示します.
結果は.
2番目のパラメータから、関数の伝達パラメータとして使用できます.
3.call、apply、bindの違いは?
callと同様にapplyとbindも同じ目的で使用される.
では、どんな違いがありますか.
call vs. apply
以前、callは複数の伝達パラメータを関数に伝達することができ、最初の伝達パラメータはオブジェクトです.
実際、これはapplyにも適用されます.
しかしapplyは複数の伝達パラメータを1つずつ伝達するわけではない. 整列 彼らに一つ渡す
func.apply(onwah, [45, 197]);
console.log(`${onwah.name} : ${onwah.job}, ${onwah.age}, ${onwah.height}`);
上のコードでは、オブジェクトの後の伝達因子部分が平らに敷かれています.結果は.
結果は同じです.callとapplyの違いは,伝達パラメータが単一伝達なのか配列伝達なのかである.
call, apply vs. bind
使い捨て vs リサイクル
:callおよびapplyは、呼び出しのたびに最初のパラメータ値として渡されるオブジェクトに属する場合があります. (複数のオブジェクトに属することができます)
const ljs = {
name: 'ljs'
}
新しいオブジェクトが作成されました.func.call(onwah, 45, 197);
func.call(ljs, 22, 153);
console.log(`${onwah.name} : ${onwah.job}, ${onwah.age}, ${onwah.height}`);
console.log(`${ljs.name} : ${ljs.job}, ${ljs.age}, ${ljs.height}`);
オブジェクトonwahとljsをそれぞれfuncに設定します.コールに渡す.結果は.
関数を呼び出すたびに、最初のパラメータとして渡されるオブジェクトにpropertyと値が設定されていることがわかります.
bind!
ただしbindはパラメータとして渡されるオブジェクトを引き続き使用することができる.
const bindedFunc = func.bind(onwah);
bindを呼び出す値を新しい変数に渡します.bindedFunc.call(ljs, 22, 153);
console.log(`${onwah.name} : ${onwah.job}, ${onwah.age}, ${onwah.height}`);
console.log(`${ljs.name} : ${ljs.job}, ${ljs.age}, ${ljs.height}`);
呼び出しcallは、ljsオブジェクトと2つのパラメータを変数として渡します.結果は.
ljsでは設定されておらず、onwahでは設定されています.
これはbindedFuncがこの値をonwahとして永久に指定しているためです.
bindは永続的に指定されますが、applyとcallは呼び出すたびに指定する必要があります.
Reference
この問題について(call, apply, bind), 我々は、より多くの情報をここで見つけました https://velog.io/@fan/call-apply-bindテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol