call和apply都是改變this指向,指向呼叫他們的物件
call 需要把引數按順序傳遞進去,而 apply 則是把引數放在陣列裡。
偽陣列(類陣列):無法直接呼叫陣列方法或期望length屬性有什麼特殊的行為,但仍可以對真正陣列遍歷方法來遍歷它們。典型的是函式的argument引數,還有像呼叫getElementsByTagName,document.childNodes之類的,它們都返回NodeList物件都屬於偽陣列。可以使用Array.prototype.slice.call(fakeArray)將陣列轉化為真正的Array物件。
- apply 、 call 、bind 三者都是用來改變函式的this物件的指向的;
- apply 、 call 、bind 三者第一個引數都是this要指向的物件,也就是想指定的上下文;
- apply 、 call 、bind 三者都可以利用後續引數傳參;
- bind 是返回對應函式,便於稍後呼叫;apply 、call 則是立即呼叫 。