一句話介紹call:使用一個指定的this和若干個指定的參數(shù)調(diào)用某個函數(shù)或方法。
在講解call顯示綁定之前,我們先想一下call做了哪些事兒。
- 將函數(shù)設(shè)為對象的屬性
- 指定函數(shù)的this,并進(jìn)行傳參
- 執(zhí)行&刪除函數(shù)
- 判定如果沒有指定要綁定的this,非嚴(yán)格模式下默認(rèn)指向全局對象
可以看到值調(diào)用call方法后,會將this綁定到指定對象,所以稱為顯示綁定
console.log(this.name);
}
var obj = {
name: 'Heternally',
}
var obj1 = {
name: 'Heternally1'
}
var name = 'zl';
foo.call(obj); // Heternally 調(diào)用call方法后強(qiáng)行將foo函數(shù)的this指向來obj對象上
foo.call(obj).call(obj1); // Heternally 多次調(diào)用call方法,以第一次為準(zhǔn)
foo.call(obj1).call(obj); // Heternally1
foo.call();// zl 沒有傳入指定對象,所以this默認(rèn)指向全局對象
如果call、apple、bind的綁定對象是null或者undefined,那么實(shí)際上在調(diào)用時這些值都會被忽略,所以使用的是默認(rèn)綁定規(guī)則