thisバインディングの方向を変える方法
1746 ワード
JavaScriptのthisは常にオブジェクトを指しています.thisは実際に関数が呼び出された時に発生するバインディングです.何を指すかは関数がどこで呼び出されるかによって異なります.
appry、call、bindとforEachはthisに対してすべて結合を表示するのです.
1.appy
fun.apply(thisArg,argAray)
thisArg:このオブジェクトはFunctionクラスのthisオブジェクトargArayの代わりになります.これは配列または疑似配列です.パラメータとしてFunctionに伝えられます.
callは同様で、最初のパラメータの役割は同じです.パラメータリストが異なるだけです.
fun.call(thisArg,arg 1,arg 2,…)
bindは一連のパラメータを受け取り、callとよく似ています.一番目のパラメータはthisの指向性で、二つ目のパラメータからは受信パラメータのリストです.
bindとcallは似ています.bind方法の戻り値は関数です.手動で呼び出さなければならないし、bind受信のパラメータリストの使用も必要です.
4.forEach
this Valueオプションのパラメータは、関数に伝達される値は一般に「this」の値を使います.このパラメータが空の場合、「undefined」は「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);//