JavaScript call、apply 和 bind 方法

callapplybind 都是 Function.prototype 上的方法。javascript

Function.prototype.call
Function.prototype.apply

Function.prototype.bind
複製代碼

call 和 apply

callapply 都用於調用函數。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
複製代碼

applycall 的第一個參數都是指定被調用函數的上下文對象(Context)。數組

apply 的第二個參數、call 的第二個以及以後參數都是傳遞給前面被調用函數的參數。不一樣的是:app

  1. 傳遞給 apply 的參數是數組類型的。
  2. 傳遞給 call 的參數是一組用逗號分隔的參數序列。

你能夠這樣快捷的記憶。函數

apply for Array, call for Comma.ui

bind

bind 接收的參數類型與 call 是同樣的,給它傳遞的是一組用逗號分隔的參數列表。this

但與 call 不同的是:bind 方法返回一個全新的函數----這個全新的函數攜帶調用 bind 方法時,提供的上下文對象和參數。spa

bind 方法一般地使用場景是:將來的某個時間,在指定的一個上下文環境下,調用一個函數(這個函數就是以前用 bind 方法處理過,返回的函數)。prototype

(完)code

相關文章
相關標籤/搜索