CoffeeScript 检测与构建丢失的函数


本文整理自网络,侵删。

检测与构建丢失的函数

问题

你想要检测一个函数是否存在,如果不存在则构建该函数。(比如Internet Explorer 8的ECMAScript 5函数)。

解决方案

使用存在赋值运算符(?=)来把函数分配给类库的原型(使用::简写),然后把它放于一个立即执行函数表达式中(do ->)使其含有所有变量。

do -> Array::filter ?= (callback) ->
  element for element in this when callback element

array = [1..10]

array.filter (x) -> x > 5
# => [6,7,8,9,10]

讨论

在JavaScript (同样地,在 CoffeeScript)中,对象都有一个原型成员,它定义了什么成员函数能够适用于基于该原型的所有对象。
在CoffeeScript中,你可以使用 :: 捷径来访问这个原型。所以如果你想要把过滤函数添加至数组类中,就执行Array::filter=...语句。它能把过滤函数加至所有数组中。

但是,不要去覆盖一个在第一时间还没有构造的原型。比如,如果Array::filter = ...已经以快速本地形式存在于浏览器中,或者库制造者拥有其对于Array::filter = ...的独特版本,这样以来,你要么换一个慢速的JavaScript版本,要么打破这种依赖于其自身Array::shuffle的库。
你需要做的仅仅是在函数不存在的时候添加该函数。这就是存在赋值运算符(?=)的意义。如果我们执行Array::filter = ...语句,它会首先判断Array::filter是否已经存在。如果存在的话,它就会使用现在的版本。否则,它会添加你的版本。

阅读剩余部分

相关阅读 >>

CoffeeScript 一个随机整数函数

CoffeeScript 数组最大值

CoffeeScript 使用 jasmine 测试

CoffeeScript 数学常数

CoffeeScript 删除数组中的相同元素

CoffeeScript 模板方法模式

CoffeeScript coffeescrip 的 type 函数

CoffeeScript 当函数括号不可选

CoffeeScript 生成器模式

CoffeeScript 创建一个不存在的对象字面值

更多相关阅读请进入《CoffeeScript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...