call, apply, bind


call,apply,bindの3つの方法の役割は類似している.
この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は呼び出すたびに指定する必要があります.