让我们用Jewell在Javascript中添加一些糖
Jewell将高阶消息传递引入Javascript
如果您想直接跳到动作(GitHub存储库), 请单击此处 。
在我的整个职业生涯中,我曾使用过多种语言和框架,并从中受益匪浅,并且从每种语言和框架中学到了很多东西。
最近,我一直在大量研究Javascript,有一天,在处理数组时,我记得Laravel框架具有一个非常酷的功能,即高阶消息传递。 它允许您创建非常富有表现力的1衬板,例如: (PHP代码)
$employees->filter->retired->each->sendPayment();
通过研究,我发现使用我最喜欢的语言之一的Ruby也有一些实现。 Ruby的语法非常流畅,因此高阶消息传递看起来很自然。 使用Nat Pryce的实现 ,这就是Ruby中相同代码的样子。
employees.where.retired?.do.sendPayment()
Java脚本呢?
您可能知道,那里有很多Javascript程序包,所以一旦研究并意识到没有针对Javascript的高阶消息传递库,您猜我将作何反应?
由于找不到适合我完成相同行为的库,因此我想看看是否有可能。 我在业余时间开始**一个版本,结果发现可以使用ES6的一项功能Proxy! \ o /
棘手的部分是要使语法漂亮,并且在Javascript生态系统中有意义,而又不会造成麻烦。 经过几次迭代,我终于得到了一个我满意的版本! 它是这样的:
employees.filter.retired.forEach.sendPayment();
与我上面显示的示例非常相似,是吗? 现在,让我们一步一步地查看完整的代码示例。
步骤0。将Jewell添加到您的项目中
npm install jewell --save
步骤1.导入jewellPrototype
并将其应用于Array
类,因此我们可以将高阶消息传递与本机数组方法一起使用。
第2步。声明一个类。 在我们的例子中是钻石
步骤3.创建一个Diamond数组
步骤4.玩得开心
请注意,在“ Get all blue diamonds
示例中,我们称为#isBlue
,这是因为#isBlue
是一个函数。 如果是这样,我们为什么不在这里称呼它?
diamonds.filter.isBlue.forEach.buy()
答案是:可以,但这不是必需的。 由于isBlue
没有参数,因此Jewell假定应调用它以允许链接。
除了修饰 Array
类本身之外,还可以将Jewell与自己的库一起使用,该库具有操作数组或单个实例的快捷方式。
⚠警告:请记住,Jewell用Proxy代替了原始方法,因此在将其运送到生产环境之前,请确保您没有在应用中创建任何疯狂的行为或放慢一切。
您可以在回购中查看更多示例。 如有任何疑问,请在下面留言或在仓库中打开问题。 也非常欢迎您提供拉取请求和建议。
事不宜迟,这是GitHub存储库:
额外
如果您喜欢用爱制作的软件,我想邀请您加入GitShowcase 。 快来获得自己的摇滚明星作品集????。 抄送 Victor F.Santos
From: https://hackernoon.com/lets-add-some-sugar-to-javascript-with-jewell-d33d282fdee9