1. call、apply、bind はすべてfunction.prototypeのメソッドであるため、各関数には call、apply、および binding 属性があります。
電話
function.call(thisArg, arg1, arg2, ...)
[thisArg] 必須。関数関数の実行時に使用される this 値。null または未定義として指定すると、グローバル オブジェクト[arg1, arg2, ...] パラメータ リストに自動的に置き換えられます。
let objCall ={
name: "我是 Call"
}
function fn() {
console.log('参数 => ', ...arguments)
console.log('name => ', this.name)
}
fn.call(objCall, 1,2,3)
// 参数 => 1 2 3
// name => 我是Call
適用する
func.apply(thisArg, [argsArray])
- [
thisArg
] はcall
同じものを選択する必要があります- [
argsArray
] オプション
let objApply ={
name: "我是 Apply"
}
function fn() {
console.log('参数 => ', ...arguments)
console.log('name => ', this.name)
}
fn.apply(objApply, [1,2,3])
// 参数 => 1 2 3
// name => 我是 Apply
練る
function.bind(thisArg, arg1, arg2, ...)
[thisArg]
[arg1, arg2, ...] 引数の必須リスト
let objBind ={
name: "我是 Bind"
}
let objApply ={
name: "我是 Apply"
}
function fn() {
console.log('参数 => ', ...arguments)
console.log('name => ', this.name)
}
let bfn = fn.bind(objBind, 1,2,3);
bfn();
bfn.call(objCall)
bfn.apply(objApply)
// 三个结果一样
// 参数 => 1 2 3
// name => 我是 Bind
2. call、apply、bind の関数はすべて、関数内の this ポイントを変更できます。
要約:
1) call、apply、bind は関数のこの点を変更できます。
2) call、apply、bind の最初のパラメータは、このオブジェクトが指すオブジェクトです。
3) call、apply、bind はすべて、後で関数のパラメータを渡すことができます。apply はパラメータを配列に結合すること、call と binding はパラメータを順番にリストすることです。
4) call と apply は直接呼び出しであり、bind によって生成された this ポイントを手動で呼び出して関数を変更する必要があります。