怎么实现如许一个curry的函数?它的重点是要返回一个函数,这个函数有一些闭包的变量记录了创建时的默认参数,然后履行这个返回函数的时刻,把新传进来的参数和默认参数拼一下变成完全参数列表去调本来的函数,所以有了以下代码:
- Function.prototype.curry = function() {
- let defaultArgs = arguments;
- let that = this;
- return function(){
- return that.apply(null,
- arguments.concat(defulatArgs));
- }
- }
然则因为参数不是一个数组,没有concat函数,所以须要把伪数组转成一个伪数组,可以用Array.prototype.slice:
- Function.prototype.curry = function() {
- let slice = Array.prototype.slice;
- let defaultArgs = slice.call(arguments);
- let that = this;
- return function() {
- return that.apply(null,
- arguments.concat(slice.call(defulatArgs)));
- }
- }
如今举一下柯里化一个有效的例子,当须要把一个数组降序排序的时刻,须要如许写:
- let data = [1,5,2,3,10];
- data.sort((a, b) => b - a); // [10, 5, 3, 2, 1]
给sort传一个函数的参数,然则如不雅你的降序操作比较多,每次都写一个函数参数照样有点烦的,是以可以用柯里化把这个参数固化起来:
- Array.prototype.sortDescending =
- Array.prototype.sort.curry((a, b) => b - a);
如许就便利多了:
- let data = [1,5,2,3,10];
- data.sortDescending();
- console.log(data); // [10, 5, 3, 2, 1]
5. 防止修改对象
有时刻你可能怕你的对象被误改了,所以须要把它保护起来。
(1)—Object.seal防止新增和删除属性
如下代码,当把一个对象seal之后,将不克不及添加和删除属性:

当使悠揭捉?格模式将会抛异常:
推荐阅读
本篇是看的《JS高等法度榜样设计》第23章《高等技能》做的读书分享。本篇按照书里的思路根据本身的懂得和经验,进行扩大延长,同时指出版里的一些问题。将会评论辩论安然的类型检测、惰性>>>详细阅读
本文标题:JavaScript高级程序设计高级技巧
地址:http://www.17bianji.com/lsqh/37134.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示