Java中,想要学习函数编程,那么函数包装你可不能落下

函数包装是一种封装函数逻辑的技巧,用于在单个步骤内重载创建新函数或继承函数。最有价值的场景是,在重载一些已经存在的函数时,同时保持原始函数在被包装后仍然能够有效使用。

一个常见的使用场景是在编写跨浏览器代码时,必须在某个特定浏览器下实现某个特定功能。例如,Opera浏览器的实现在获取title特性值的时候有一个bug。在Prototype库中,通过函数包装技巧解决了这个bug。为了防止在readAttribute()函数中出现过多的if-else这样的代码块(比较丑陋,并且不是特别好的代码逻辑分割方式)。

让我们研究一下。首先,创建一个包装函数用于函数包装,然后用该函数为Prototype's的readAttribute()方法创建一个包装器。代码清单1 使用新功能包装旧函数

让我们深究一下wrap()函数是如何工作的。传入了一个基本对象、要包装该对象中的方法名称、新包装器函数。首先,将原有方法保存在变量fn中,稍后我们在后面会通过匿名函数的闭包来访问它。然后,我们使用一个新的匿名函数来重载该方法。新函数执行了之前传进来的包装器函数wrapper(通过闭包),并传递一个重新构造过的参数列表。

在构建这个参数列表时,我们希望第一个参数是我们要重载的原有函数,所以我们创建了一个数组,其中包含原始函数的引用,并将原始参数也追加到该数组中。正如我们在第3章所了解的,apply()方法会将该数组作为参数列表。Prototype类库利用wrap()函数,实现了对一个已经存在函数的重写(在本例中是重写了readAttribute()),取而代之的是一个新函数。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181014A1NYM800?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券