函数存储的另一种思路

有时候需要存储一组函数,但要确定函数在这个集合中不能重复,绝大多数第一个想到的是将所有的函数保存在数组中,然后遍历数组检查重复的函数,其实可以利用函数属性的特性,给函数添加一个附加属性实现

var store = {
			nextId:1,
			cache:{},
			add:function(fn){
				if(!fn.id){
					fn.id = store.nextId++;
					return !!(store.cache[fn.id] = fn);
				}
			}

		}
		var fn = function(){}
		console.log(store.add(fn));
		console.log(store.add(fn));

 在add中我们首先检测要添加的属性是否有一个id属性,如果有,则表示函数已经处理过,忽略它,如果没有则给函数分配一个id属性,然后将函数作为一个cache属性添加进来,同时使用id值作为属性名称。

!! 构造是一个可以将任意javascript表达式转化为等效布尔值的简单方式。例如!!"he shot me down" === true

posted on 2015-12-21 20:02  小武爷  阅读(162)  评论(0编辑  收藏  举报