call
、apply
和 bind
都是 Function.prototype
上的方法。javascript
Function.prototype.call
Function.prototype.apply
Function.prototype.bind
複製代碼
call
、apply
都用於調用函數。java
function sayName(...args) {
console.log(`${this.name} 和其餘參數 ${args}`);
};
let me = {
name: 'zhangbao'
};
// 1. 使用 apply
sayName.apply(me, [1, 2, 3]); // zhangbao 和其餘參數 1,2,3
// 2. 使用 call
sayName.call(me, 1, 2, 3); // zhangbao 和其餘參數 1,2,3
複製代碼
apply
和 call
的第一個參數都是指定被調用函數的上下文對象(Context)。數組
apply
的第二個參數、call
的第二個以及以後參數都是傳遞給前面被調用函數的參數。不一樣的是:app
apply
的參數是數組類型的。call
的參數是一組用逗號分隔的參數序列。你能夠這樣快捷的記憶。函數
apply
for Array,call
for Comma.ui
bind
接收的參數類型與 call
是同樣的,給它傳遞的是一組用逗號分隔的參數列表。this
但與 call
不同的是:bind
方法返回一個全新的函數----這個全新的函數攜帶調用 bind
方法時,提供的上下文對象和參數。spa
bind
方法一般地使用場景是:將來的某個時間,在指定的一個上下文環境下,調用一個函數(這個函數就是以前用 bind
方法處理過,返回的函數)。prototype
(完)code