JavaScript中apply方法的應(yīng)用技巧小結(jié)
前言
最近在看JavaScript設(shè)計模式,其中有一些巧妙的函數(shù)。所以將部分修改后記錄在此,順便加上自己寫出的一些好玩的函數(shù)。方便大家和自己以后使用。下面來一起看看。
一、apply實現(xiàn)call
Function.prototype.call = function () {
var ctx = [].shift.apply(arguments)
return this.apply(ctx, arguments)
}
二、apply實現(xiàn)bind
Function.prototype.bind = function () {
var ctx = [].shift.apply(arguments),
args = [].slice.apply(arguments),
self = this
return function () {
return self.apply(ctx, args.concat([].slice.apply(arguments)))
}
}
三、實現(xiàn)函數(shù)柯里化
Function.prototype.currying = function () {
var args = [],
self = this
return function () {
if (arguments.length === 0) {
return self.apply(this, args)
} else {
[].push.apply(args, arguments)
return arguments.callee
}
}
}
//用法
var add = function () {
var sum = 0
for (var i = 0; i < arguments.length; i++) {
sum += arguments[i]
}
return sum
}.currying()
add(2) //并未求值
add(3, 3) //并未求值
add(4) //并未求值
console.log(add()) //12
嚴格模式不能使用arguments.callee, 稍微改一下
Function.prototype.currying = function () {
var args = [],
self = this
var f = function () {
if (arguments.length === 0) {
return self.apply(this, args)
} else {
[].push.apply(args, arguments)
return f
}
}
return f
}
四、實現(xiàn)函數(shù)反柯里化
Function.prototype.uncurrying = function () {
var self = this
return function () {
var obj = [].shift.apply(arguments)
return self.apply(obj, arguments)
}
}
// 用法
var push = Array.prototype.push.uncurrying()
var obj = {}
push(obj, '嘿')
console.log(obj) //{0: "嘿", length: 1}
另一種方法:call和apply連用實現(xiàn)函數(shù)反柯里化
Function.prototype.uncurrying = function () {
var self = this
return function () {
return Function.prototype.call.apply(self, arguments)
//有點繞,其實就是return self.call(args[0], args[1], args[2]...)
}
}
五、為數(shù)組添加max函數(shù)
Array.prototype.max = function () {
return Math.max.apply(null, this)
}
console.log([1, 3, 5, 2].max()) //5
總結(jié)
以上就是這篇文章的全部內(nèi)容改了,希望能對大家的學(xué)習(xí)和工作有所幫組,如果有疑問大家可以留言交流。
- AngularJS中$apply方法和$watch方法用法總結(jié)
- JS中使用apply方法通過不同數(shù)量的參數(shù)調(diào)用函數(shù)的方法
- JavaScript中的call方法和apply方法使用對比
- 從JQuery源碼分析JavaScript函數(shù)的apply方法與call方法
- 使用apply方法實現(xiàn)javascript中的對象繼承
- js中apply方法的使用詳細解析
- javascript中call和apply方法淺談
- JavaScript 學(xué)習(xí)筆記(九)call和apply方法
- javascript call和apply方法
- Js apply方法詳解
相關(guān)文章
用javascript調(diào)出windows色版的代碼
用javascript調(diào)出windows色版的代碼...2007-07-07
JavaScript實現(xiàn)獲取URL中參數(shù)值的4種方法
這篇文章主要為大家詳細介紹了如何使用JavaScript實現(xiàn)獲取URL中參數(shù)值的4種方法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2025-02-02
XMLHTTP 亂碼的解決方法(UTF8,GB2312 編碼 解碼)
XMLHTTP 亂碼的解決方法(UTF8,GB2312 編碼 解碼)(附帶解決DHTMLX不能用中文的問題)2011-01-01
javascript-簡單的計算器實現(xiàn)步驟分解(附圖)
輸入內(nèi)容的判斷,對于事件對象的來源的判斷以及數(shù)學(xué)運算“+,-,*,/”的使用,感興趣的朋友可以學(xué)習(xí)下2013-05-05
javascript實現(xiàn)客戶端兼容各瀏覽器創(chuàng)建csv并下載的方法
這篇文章主要介紹了javascript實現(xiàn)客戶端兼容各瀏覽器創(chuàng)建csv并下載的方法,實例分析了javascript操作csv文件的技巧,需要的朋友可以參考下2015-03-03

