thisバインディングの方向を変える方法

1746 ワード

JavaScriptのthisは常にオブジェクトを指しています.thisは実際に関数が呼び出された時に発生するバインディングです.何を指すかは関数がどこで呼び出されるかによって異なります.
appry、call、bindとforEachはthisに対してすべて結合を表示するのです.
1.appy
fun.apply(thisArg,argAray)
thisArg:このオブジェクトはFunctionクラスのthisオブジェクトargArayの代わりになります.これは配列または疑似配列です.パラメータとしてFunctionに伝えられます.
function foo(){
    console.log.apply(obj,arguments);//bb aa
    console.log(this.id);//pp
}
var obj = {
    id:'pp'
}

foo.apply(obj,['bb','aa'])
2.コール
callは同様で、最初のパラメータの役割は同じです.パラメータリストが異なるだけです.
fun.call(thisArg,arg 1,arg 2,…)
function foo(){
    // console.log(arguments,this.id);
    console.log.apply(obj,arguments);
    console.log(this.id);
}
var obj = {
    id:'pp'
}

foo.call(obj,'ab','aa')
3.ビッド
bindは一連のパラメータを受け取り、callとよく似ています.一番目のパラメータはthisの指向性で、二つ目のパラメータからは受信パラメータのリストです.
var obj = {
    name: 'Dot'
}

function printName() {
    console.log(this.name)
}

var dot = printName.bind(obj)
console.log(dot) // f
dot()  // Dot
bind方法はすぐには実行されず、コンテキストthisを変更した関数を返します.もとの関数printNameの中のthisは変えられていないで、依然として大域の対象windowを指します.
bindとcallは似ています.bind方法の戻り値は関数です.手動で呼び出さなければならないし、bind受信のパラメータリストの使用も必要です.
4.forEach
array.forEach(function(currentValue, index, arr), thisValue)
function(currentValue,index,arr)に必要なパラメータは、forEach配列を巡回した後、デフォルトの配列要素はパラメータcurrent Value着信関数です.
this Valueオプションのパラメータは、関数に伝達される値は一般に「this」の値を使います.このパラメータが空の場合、「undefined」は「this」の値に伝達されます.
 
function foo(){
    console.log(arguments,this.id);
}
var obj = {
    id:'pp'
}

let arr1 = [1,2,3];
arr1.forEach(foo,obj);//