1. call()
call(this,a1,a2,a3,...)
call方法,可以指定函數(shù)內(nèi)部this的指向(即函數(shù)執(zhí)行時所在的作用域)奖亚,然后在所指定的作用域中,調(diào)用該函數(shù)昔字。
call的第一個參數(shù)就是this所要指向的那個對象,后面的參數(shù)則是函數(shù)調(diào)用時所需的參數(shù)首繁。
function add(a, b) {
return a + b;
}
add.call(this, 1, 2) // 3
var n =111;
var x = { n: 222 };
function f() {
console.log(this.n);
}
f(x) //111
f.call(x) //222
2. apply
與call類似,改變this指向弦疮,再調(diào)用函數(shù)
區(qū)別: 接收一個數(shù)組作為函數(shù)執(zhí)行時的參數(shù)
func.apply(this,[a1,a2,a2,a3,...])
var a = { n: 2 };
function f(x,y) {
return x + y* this.n ;
}
f.call(a,1,2) //5
f.apply(a,[1,2]) // 5
3. bind()
bind 方法用于將函數(shù)體內(nèi)的 this 綁定到某個對象,然后返回一個新函數(shù)胁塞。
bind 與 call 類似,接受參數(shù)相似啸罢。但是bind生成一個新函數(shù),call直接調(diào)用
var add = function (x, y) {
return x * this.m + y * this.n;
}
var obj = {
m: 2,
n: 2
};
var xxx = add;
xxx.call(obj,1,2) //6
var yyy = add;
yyy.apply(obj,[1,2]) //6
var Add= add.bind(obj); //此時改變 this 指向了obj對象,生成一個函數(shù)
Add(1,2) //6
最后編輯于 :2018.10.23 11:35:59
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者