当前位置: 首页 > 编程笔记 >

JavaScript中apply方法的应用技巧小结

蒙墨竹
2023-03-14
本文向大家介绍JavaScript中apply方法的应用技巧小结,包括了JavaScript中apply方法的应用技巧小结的使用技巧和注意事项,需要的朋友参考一下

前言

最近在看JavaScript设计模式,其中有一些巧妙的函数。所以将部分修改后记录在此,顺便加上自己写出的一些好玩的函数。方便大家和自己以后使用。下面来一起看看。

一、apply实现call

Function.prototype.call = function () {
 var ctx = [].shift.apply(arguments)
 return this.apply(ctx, arguments)
}

二、apply实现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)))
 }
}

三、实现函数柯里化

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
}

四、实现函数反柯里化

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连用实现函数反柯里化

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]...)
 }
}

五、为数组添加max函数

Array.prototype.max = function () {
 return Math.max.apply(null, this)
}
console.log([1, 3, 5, 2].max()) //5

总结

以上就是这篇文章的全部内容改了,希望能对大家的学习和工作有所帮组,如果有疑问大家可以留言交流。

 类似资料:
  • 本文向大家介绍JavaScript常用小技巧小结,包括了JavaScript常用小技巧小结的使用技巧和注意事项,需要的朋友参考一下 前言      总结一下最近接触到的JavaScript语法糖,与大家共享。      每块糖都有详细的说明和示例,就不多说了。 准确的类型检查  优雅的添加原型方法  快捷创建命名空间

  • 本文向大家介绍JavaScript小技巧整理,包括了JavaScript小技巧整理的使用技巧和注意事项,需要的朋友参考一下 本文整理总结了JavaScript的小技巧。分享给大家供大家参考,具体如下: 1.组织默认事件 阻止默认事件,h5默认的input type='date'在某些浏览器和android设备上没有效果,这时要调用h5+的时间选择器,但是要组织input默认的click事件,代码如

  • 本文向大家介绍JavaScript实用代码小技巧,包括了JavaScript实用代码小技巧的使用技巧和注意事项,需要的朋友参考一下 在上次的 “Chrome DevTools 你可能不知道的小技巧” 文中,得到很多开发朋友的反馈确实不知道这些小技巧。今天,我们来聊一聊在 EcmaScript5/6+ 中的一些小技巧,欢迎评论区讨论下更多技巧。 JSON.stringify 我们平时经常会用到JSO

  • 本文向大家介绍用javascript关闭本窗口技巧小结,包括了用javascript关闭本窗口技巧小结的使用技巧和注意事项,需要的朋友参考一下 大家都知道window.close()是用来关闭窗口的,而且ie和firefox都是支持的。 为了实现用户对浏览器的绝对控制,ie中用close关闭非open打开的窗口时回弹出一个对话框询问用户,怎么去掉这个框呢,请看下面的代码。 在window.clos

  • 本文向大家介绍PHP中JSON的应用技巧,包括了PHP中JSON的应用技巧的使用技巧和注意事项,需要的朋友参考一下 互联网的今天,AJAX已经不是什么陌生的词汇了。说起AJAX,可能会立即想起因RSS而兴起的XML。不可否认,XML是很不错的数据存储方式,但是其灵活恰恰造成了其解析的困难。当然,这里所指的困难,是相对于本文的主角--JSON而言。 JSON为何物?我就不重复概念了。通俗的说,它是一

  • 本文向大家介绍Python中Collection的使用小技巧,包括了Python中Collection的使用小技巧的使用技巧和注意事项,需要的朋友参考一下 本文所述实例来自独立软件开发者 Alex Marandon,在他的博客中曾介绍了数个关于 Python Collection 的实用小技巧,在此与大家分享。供大家学习借鉴之用。具体如下: 1.判断一个 list 是否为空 传统的方式: 由于一个