JavaScript apply()
apply可以修改指定函式的呼叫物件,函式中的this也會指向新的呼叫物件。
恰當的使用apply可以讓繁瑣的操作變得更為簡單。
特別說明:apply對箭頭函式無效。
語法結構:
[JavaScript] 純文字檢視 複製程式碼function.apply(newObj[, argsArray])
引數解析:
(1).function:此函式的呼叫物件將被修改。
(2).newObj:必需,函式的新呼叫物件。
(3).argsArray:必需,傳遞給function函式的引數,陣列或者arguments物件。
一.程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let antzone={ webName:"螞蟻部落", show:function(){ console.log(this.webName); } } let baidu={ webName:"百度", show:function(){ console.log(this.webName); } } antzone.show(); antzone.show.apply(baidu);
程式碼執行效果截圖如下:
程式碼分析如下:
(1).antzone呼叫show方法,無疑this是指向antzone,列印結果自然是"螞蟻部落"。
(2).antzone.show.apply,apply可以將show呼叫物件由antzone修改為baidu。
(3).被修改之後,show中的this指向新物件baidu,那麼列印結果也就變成"百度"。
再來看一段程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼function A(){ this.url="http://www.softwhy.com"; } function B(age,address){ this.age=age; this.address=address; console.log(this.age); console.log(this.address); console.log(this.url); } let oa=new A(); B.apply(oa,["age","青島市南區"]);
程式碼執行效果截圖如下:
程式碼分析如下:
(1).建立建構函式A的一個物件例項oa。
(2).通過apply方法將B函式的呼叫物件修改為oa。
(3).修改之後,B函式中的this指向物件oa。
(4).最後給apply傳遞第二個引數,具有兩個元素的陣列,那麼B接收陣列中的兩個元素作為引數。
二.實際應用:
獲取數字陣列中的最大值和最小值的方式有很多,比如自己寫程式碼挨個遍歷比較。
比較方便的方式是利用Math.max和Math.min方法實現。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let arr = [7,3,4,6,10]; console.log(Math.max.apply(Math,arr)); console.log(Math.min.apply(Math,arr));
程式碼執行效果截圖如下:
Math.max和Math.min方法可以接收多個數字以比較它們之間的大小。
可以通過apply方法以陣列形式傳遞引數,非常簡潔的實現了預期效果。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let a = [1,2,3]; let b = [3,4]; Array.prototype.push.apply(a, b); console.log(a);
程式碼執行效果截圖如下:
利用apply可以很方便的實現了陣列的合併效果。
由於ES2015的出現,還有比上面更加方便的合併陣列的方式。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let arr=[4,5]; console.log([1,2,3,...arr]);
程式碼執行效果截圖如下:
使用展開運算子使陣列合並陣列更加方便。
關於展開運算子更多知識可以參閱JavaScript 展開運算子一章節
相關文章
- Javascript - apply、call、bindJavaScriptAPP
- JavaScript-apply、bind、callJavaScriptAPP
- JavaScript中的call()和apply()JavaScriptAPP
- [譯] Javascript: call()、apply() 和 bind()JavaScriptAPP
- JavaScript重識bind、call、applyJavaScriptAPP
- JavaScript 中的 apply、call、bindJavaScriptAPP
- 詳解 JavaScript的 call() 和 apply()JavaScriptAPP
- javascript -- apply/call/bind的區別JavaScriptAPP
- Javascript - 全面理解 caller,callee,call,applyJavaScriptAPP
- JavaScript深入理解系列:call與applyJavaScriptAPP
- 快速掌握javascript的apply()和call()方法JavaScriptAPP
- 快速理解JavaScript中call和apply原理JavaScriptAPP
- 理解JavaScript中的arguments,callee,caller,applyJavaScriptAPP
- JavaScript中call,apply,bind方法的總結。JavaScriptAPP
- [譯] 如何在 JavaScript 中使用 apply(?),call(?),bind(➰)JavaScriptAPP
- 談談JavaScript中的call、apply和bindJavaScriptAPP
- javascript之模擬call以及apply實現JavaScriptAPP
- JavaScript之call, apply, bind, new的實現JavaScriptAPP
- JavaScript自我實現系列(2):call,apply,bindJavaScriptAPP
- 對javascript中的call()和apply()的理解JavaScriptAPP
- 淺談JavaScript中的apply、call和bindJavaScriptAPP
- JavaScript 中call apply 那點簡單事JavaScriptAPP
- JavaScript中call,apply,bind方法的總結JavaScriptAPP
- 深入淺出 妙用Javascript中apply、call、bindJavaScriptAPP
- 深入淺出妙用 Javascript 中 apply、call、bindJavaScriptAPP
- JavaScript進階之模擬call,apply和bindJavaScriptAPP
- javascript的call apply和new原理剖析 [手寫]JavaScriptAPP
- 前端戰五渣學JavaScript——call、apply以及bind前端JavaScriptAPP
- javascript中call()、apply()、bind()的用法終於理解JavaScriptAPP
- JavaScript中apply、call、bind的區別與用法JavaScriptAPP
- JavaScript中bind、call、apply函式用法詳解JavaScriptAPP函式
- 函式式JavaScript(3):.apply()、.call() 和arguments物件函式JavaScriptAPP物件
- javascript 物件導向學習(三)——this,bind、apply 和 callJavaScript物件APP
- JavaScript 深入之 call 和 apply 的模擬實現JavaScriptAPP
- 跟我學習javascript的call(),apply(),bind()與回撥JavaScriptAPP
- JavaScript—call, apply, bind 函式能幹啥?(全)(20)JavaScriptAPP函式
- JavaScript專題之模擬實現call和applyJavaScriptAPP
- JavaScript 之 call和apply,bind 的模擬實現JavaScriptAPP