call、apply、bind の使用法と違い

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 ポイントを手動で呼び出して関数を変更する必要があります。

おすすめ

転載: blog.csdn.net/weixin_50543490/article/details/127992959