call() 和apply()可以看作是某個物件的方法,通過呼叫方法的形式來間接呼叫函式,
都是在特定作用域中呼叫函式,等于設定在函式體內的this的值,
call()和apply()的第一實參是要呼叫函式的母物件,
注:在嚴格模式中,call()和apply()第一個實參都會變成this的值,哪怕傳入的實參是null 或undefined,
call()
call()的第一個引數是this值沒有變化,其余引數都是直接傳遞給函式,換句話說,傳遞給函式的引數必須逐個列舉出來,
function f() { } var o = {}; // 要想以物件o的方法來呼叫函式f(),可以下面的寫法 f.call(o); // 與下面代碼的功能類似: o.m = f; o.m();
delete o.m;
// 列舉除第一個引數外的其余引數 Math.min.call(this,1,2,3,4,5); // 1 Math.max.call(this,1,2,3,4,5); // 5 // ES6語法 ...為ES6新增的 擴展運算子 Math.min(...[1,2,3,4,5]); // 1 Math.max(...[1,2,3,4,5]); // 5
apply()
apply()的用法和call()并無區別,只是引數不同,apply()方法接收兩個引數,一個是在運行函式的作用域,另一個是陣列(可以是Array實體,也可以是arguments物件),
function f() { } var o = {}; // 要想以物件o的方法來呼叫函式f(),可以下面的寫法 f.apply(o); // 與下面代碼的功能類似(假設物件o中沒有m屬性): o.m = f; o.m(); delete o.m; // 列舉除第一個引數外的其余引數 Math.min.apply(this, [1, 2, 3, 4, 5]); // 1 Math.max.apply(this, [1, 2, 3, 4, 5]); // 5 // ES6語法 ...為ES6新增的 拓展運算子 Math.min(...[1, 2, 3, 4, 5]); // 1 Math.max(...[1, 2, 3, 4, 5]); // 5
bind()
bind的主要作用是將函式系結到某個物件,回傳一個新函式,
通過可選的指定引數,作為指定物件的方法呼叫該方法,
function f(y) { return this.x + y;} var o = { x: 1 }; var g = f.bind(o); // 通過g(x)來呼叫o.f(x) g(2); // 3
...為ES6新增的 擴展運算子
好好做人,認真生活,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/413080.html
標籤:JavaScript
下一篇:ES6常用陣列方法及模擬實作
