将函数视为对象(javascript忍者第四章)
2018-03-17 12:18
190 查看
在js中,函数可以有属性和方法,并且可以被调用。所以其特征之一就是,将函数作为第一型对象。
> 2.在add()函数中,首先检测id是否已经存在,如果存在,则说明已经被处理过。如果不存在,我们为其分配一个id属性,并且自增。然后将函数作为cache的一个属性添加进来,同时使用id值作为属性名称。
代码:
我们可以将状态和缓存信息存储在一个封装的独立位置上,不仅在代码组织上有好处,而且外部存储或缓存对象无需污染作用域,就可以提升其性能。
优点:
在函数调用获取之前计算结果的时候,最终用户享有性能优势。
发生在幕后,完全无缝,最终用户和页面开发人员都无需任何特殊操作或为此做任何额外的初始化工作。
缺点:
缓存牺牲内存。
很难测试一个算法的性能。
eg 代码:
let obj={}; let fn=function(){};//将函数赋值给对象的一个属性,从而创建一个方法。
1.函数存储
1.我们创建一个对象,并且复制给store变量,该对象有两个数据属性:一个用于存储下一个可用的
id,另一个
cache用于存储函数,函数时通过
add()方法将其添加到cache中的。
> 2.在add()函数中,首先检测id是否已经存在,如果存在,则说明已经被处理过。如果不存在,我们为其分配一个id属性,并且自增。然后将函数作为cache的一个属性添加进来,同时使用id值作为属性名称。
代码:
let store={ nexId:1, cache:{},//创建一个对象作为缓存,用于存储函数 add:function(fn){ if(!fn.id){ fn.id=store.nexId++; return !!(store.cache[fn.id]=fn);//通过!!构造一个将任意表达式转化为其等效布尔值的简单方式。 } } }; function nihao(){}; store.add(nihao);
2.缓存记忆
它是构建函数的过程,这种函数能够记住之前计算的结果。例如,在列表里存储已经遍历过的DOM元素。function getElements(name){ if(!getElements.cache) getElements.cache={}; return getElements.cache[name]=getElements.cache[name]||document.getElementsByTagName(name); }
我们可以将状态和缓存信息存储在一个封装的独立位置上,不仅在代码组织上有好处,而且外部存储或缓存对象无需污染作用域,就可以提升其性能。
优点:
在函数调用获取之前计算结果的时候,最终用户享有性能优势。
发生在幕后,完全无缝,最终用户和页面开发人员都无需任何特殊操作或为此做任何额外的初始化工作。
缺点:
缓存牺牲内存。
很难测试一个算法的性能。
3.仿造数组方法
我们可以为任何对象添加属性和方法,包括数组。eg 代码:
let elems={ length:0, add:function(elem){ Array.prototype.push.call(this,elem); }, gather:function(id){ this.add(document.getElementByID(id)); } };
相关文章推荐
- javascript忍者秘籍之第四章笔记(函数进阶)
- 好好学一遍JavaScript 笔记(九)——事件处理函数/监听函数/事件对象
- [Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法
- JavaScript特殊的对象2:函数
- javascript让setInteval里的函数参数中的this指向特定的对象
- javascript快速入门4--函数与内置对象
- 源码-JavaScript&jQuery交互式前端开发-第3章-函数、方法与对象-浏览器对象模型
- Javascript我学之六对象工厂函数与构造函数
- javascript 日期Date对象处理函数
- JavaScript之枚举属性的对象函数
- 浅析JavaScript中两种类型的全局对象/函数
- 【JavaScript】函数中的arguments对象与Rest参数
- JavaScript之基础-13 JavaScript Functions (Function对象、创建函数、匿名函数、闭包)
- JavaScript基础(基本语法:变量、语句、数组、函数、对象、全局方法以及js与java不同,js与html关联)
- JavaScript中函数与对象的关系
- javascript的函数、创建对象、封装、属性和方法、继承
- 枚举JavaScript对象的函数