JavaScript中call,appyとbind
7131 ワード
call and appy 関数内部のthisの指向(すなわち関数実行時の作用領域)を変更し、指定された作用領域で関数を呼び出します. callの第二のパラメータは、単一のパラメータ から始まります. appyの2番目のパラメータは、配列またはクラス である.
2.空の要素とundefinedの違い配列のforEach方法は空の要素をスキップしますが、undefinedはスキップされません.したがって、内部要素を遍歴すると、異なる結果が得られます. 3.類似配列のオブジェクトを変換するによって処理されるオブジェクトには、length属性と対応する数字キーが必要である.
関数内のthisをオブジェクトに結合し、新しい関数を返します.
bindメソッド使用上の注意点 bind方法は、1回実行するごとに、新しい関数を返します.1つの変数受信 が必要です.は、コールバック関数と組み合わせて を使用する.
コール方法と組み合わせて使う
1.普通にsliceを使う
3.類似の書き方は他の配列方法にも使用できます.
4.Funtions.prototype.bind方法をFuntions.prototype.callにする方法は、bindの呼び出し形式も書き換えられます.
function test() {}
test() == test.call()
var obj ={};
Object.prototype.toString.call(obj) //"[object Object]"
// call apply this
obj.toString()
1.callとappyの違いは、参加にあります.var a = [1, 2, 4, 1, 15];
Math.max.apply(null, a) // 15
Math.max.call(null, 1, 2, 4, 16, 15) // 16
// undefined
Array.apply(null [1,,3,,4) //[1,undefined,3,undefined,4];
最初のパラメータが空、null、undefinedであると、デフォルトではグローバルオブジェクトに入ります.2.空の要素とundefinedの違い
let obj = { 0: 1, length: 2 };
let obj1={ 0: 1,1: 2, length: 2 };
Array.protetype.slice.apply(obj);//[1,undefined]
Array.protetype.slice.apply(obj1);//[1,2]
bindメソッド関数内のthisをオブジェクトに結合し、新しい関数を返します.
var counter = {
count: 0,
a: function () {
this.count++;
}
};
var func = counter.a.bind(counter);
func();
counter.count // 1
var add = function (x, y) {
return x * this.m + y * this.n;
}
var obj = {
m: 2,
n: 2
};
var newAdd = add.bind(obj, 5); // x 5
newAdd(5) // 20
newAdd(1,5)//12
最初のパラメータはnullまたはundefinedで、thisをグローバルオブジェクトに結びつけるのと同じです. bindメソッド使用上の注意点
var counter = {
count: 0,
inc: function () {
'use strict';
this.count++;
}
};
function callIt(callback) {
callback();
}
callIt(counter.inc.bind(counter));
counter.count // 1
コール方法と組み合わせて使う
1.普通にsliceを使う
[1, 2, 3].slice(0, 2) // [1,2]
//
Array.prototype.slice.call([1, 2, 3], 0, 2) // [1,2]
2.アラy.prototype.sliceをFuntions.prototype.calメソッドの対象に変更し、呼び出し時にアラy.prototype.slice.calになります.var slice = Function.prototype.call.bind(Array.prototype.slice);
Function.prototype.slice.call([1, 2, 3], 0, 1) // [1]
//slice([1, 2, 3], 0, 1)
3.類似の書き方は他の配列方法にも使用できます.
var push = Function.prototype.call.bind(Array.prototype.push);
var pop = Function.prototype.call.bind(Array.prototype.pop);
var a = [1 ,2 ,3];
push(a, 4)
a // [1, 2, 3, 4]
pop(a)
a // [1, 2, 3]
4.Funtions.prototype.bind方法をFuntions.prototype.callにする方法は、bindの呼び出し形式も書き換えられます.
function f() {
console.log(this.v);
}
var o = { v: 123 };
var bind = Function.prototype.call.bind(Function.prototype.bind);
bind(f, o)() // 123