一、是用來幹什麼的?數組
改變this指向!!!app
二、是什麼?this
是一個方法,function原型鏈上的方法prototype
記住是某方法的call方法和apply方法3d
三、怎麼用?對象
強行把a方法的this指向爲call方法的第一個參數對象。blog
那後面的參數是幹嗎的?是傳給調用call,apply方法的那個方法!繼承
apply方法的區別? 答:就是後面的參數要寫成數組的形式原型鏈
四、具體的應用?字符串
1、數組拼接
方法1:cancat
arr1=arr1.cancat(arr2);
方法2:push+...擴展運算符
arr1.push(...arr2);
方法3:push+apply
arr1.push.apply(arr1,arr2);
或者 [].push,apply(arr1,arr2);
或者 Array.prototype.push.apply(arr1,arr2)
只要能找到push方法就能夠,由於最後咱們都要將this指向轉化爲arr1
爲何使用apply,不使用call,由於這裏恰好是arr2是一個數組,符合要求,更方便。
2、判斷類型
object.prototype.tostring(arr1);
首先找到tostring方法,而後改變他的指向到要檢測的東西
3、找出最大值和最小值
方法是math,max()和math,min()
可是這個方法接收的是以,形式傳入的,而不是數組
因此調用apply方法,就能夠傳數組了
Math.max.apply(null,arr1)
最小值相似
4、僞數組的轉換
slice方法
參數(start,end)
若是參數爲空,則所有截取,至關於(0)
一個參數,則從參數的地方開始到結尾處,參數爲下標
返回一個新數組
5、構造繼承
讓B繼承於A,最好的方法就是讓A在B中運行一遍
可是考慮到可能A中可能有this指向,到B中運行時就可能致使運行時this指向不對,因此使用apply,或者call方法
6、字符串的拆解,中間用‘ ,’號分開
方法一:先用split()方法拆解,,再用join()方法鏈接起來
split() 方法用於把一個字符串分割成字符串數組。
若是把空字符串 ("") 用做 參數,那麼 stringObject 中的每一個字符之間都會被分割。
join() 方法用於把數組中的全部元素放入一個字符串。
參數,就是分隔符,不寫參數默認用‘ ,’號分隔。
方法二:call()
七八:
第七種,沒聽懂,沒多大用
第八種,瞭解,用途:兼容嚴格模式