JavaScript中使用function作为对象键值
JavaScript的键值只能是string或者number,这一点真是返祖现象啊。现在我面临的问题:
var funcs = {};
var funcA = function() {
};
var funcB = function() {
};
var funcC = function(){}
funcs[funcA] = "funcA";
funcs[funcB] = "funcB";
funcs[funcC] = "funcC";
delete funcs[funcA]; //funcs[funcB]也被删除了
//只输出"funcC"
for(var key in funcs) {
console.log(funcs[key]);
}
所以一个最佳实践就是使用数组进行o(n)的操作:
funcs = [];
funcs.push({ "fn": funcA, "des": "funcA" });
funcs.push({ "fn": funcB, "des": "funcB" });
funcs.push({ "fn": funcC, "des": "funcC" });
for(var i = 0; i < funcs.length; i++) {
if(funcs[i].fn === funcA) {
funcs.splice(i, 1);
}
}
//输出"funcB"和"funcC"
for(var i = 0; i < funcs.length; i++) {
console.log(funcs[i].des);
}
但是如果这样就结束了那么我也太无趣了,所以:
i = 0;
var unicon = function(func) {
var temp;
//感谢eval的闭包
eval("temp = function() {/*" + (i++) + "*/func.apply(this, arguments); }");
return temp;
};
var func = function() {
console.log("func");
};
var uniconified = unicon(func);
func = function() {
console.log("dark func");
}
//输出的是"func",不是"dark func"
uniconified();
funcs = {};
uniconifiedFuncA = unicon(funcA);
uniconifiedFuncB = unicon(funcB);
uniconifiedFuncC = unicon(funcC);
funcs[uniconifiedFuncA] = "funcA";
funcs[uniconifiedFuncB] = "funcB";
funcs[uniconifiedFuncC] = "funcC";
delete funcs[uniconifiedFuncA];
//输出"funcB"和"funcC"
for(var key in funcs) {
console.log(funcs[key]);
}
JavaScript中使用function作为对象键值的更多相关文章
- JavaScript中的Function(函数)对象详解
JavaScript中的Function对象是函数,函数的用途分为3类: 作为普通逻辑代码容器: 作为对象方法: 作为构造函数. 1.作为普通逻辑代码容器 function multiply(x, y ...
- javascript中的内置对象
2015.12.1 javascript中的内置对象 复习: 1.js中的内置函数 alert prompt write parseInt parseFloat eval isNaN document ...
- (转载)JavaScript中的Window窗口对象
(转载)http://www.ijavascript.cn/jiaocheng/javascript-window-65.html 例子: <html> <head> < ...
- javaScript中Math内置对象基本方法入门
概念 Math 是javaScript的内置对象,包含了部分数学常数属性和数学函数方法. Math 不是一个函数对象,用户Number类型进行使用,不支持BigInt. Math 的所有属性与方法都是 ...
- javascript中遇到的字符串对象处理
在javascript中对参数处理: 1 <script> 2 function getParam() 3 { 4 urlInfo=window.location.href; //获取当前 ...
- JavaScript中的类方法、对象方法、原型方法
类方法:也叫函数方法,在JavaScript中函数也是一个对象,所以可以为函数添加属性以及方法: 对象方法:包括构造函数中的方法以及其原型上面的方法: 原型方法:一般用于对象实例共享,在原型上面添加该 ...
- js关于对象键值为数字型时输出的对象自动排序问题的解决方法
一.对象键值为数字型时输出的对象自动排序问题如: var objs = { "1603":{id:"1603"}, "1702" ...
- Delphi中一些常用的组合键值
Delphi中一些常用的组合键值 CTRL+A: #1 CTRL+B: #2 CTRL+C: #3 CTRL+D: #4 CTRL+E: #5 CTRL+F: #6 CTRL+G: #7 ...
- javascript中的function命名空間與模擬getter、setter
function的命名空間 在javascript中,function也可以擁有自己的命名空間例如以下這段程式碼: 12345678 function () { return 'I am A';} A ...
随机推荐
- grep匹配字符串出现的次数
背景:想要匹配一个html页面中某个字符出现的次数 遇到的问题: 用grep -c “xxx字符”得到的是行数,如果一行中有多个匹配到的字符,只会算作一个 解决方法: 使用grep - ...
- toString方法的用法
public class JLDtoS { public static void main(String[]args) { long a=123; Long aa=new Long ...
- Redis常用数据类型及命令
Redis数据类型 Redis支持五种数据类型:string(字符串),hash(哈希),list(列表),set(集合)及zset(sorted set:有序集合). 注意: 命令的关键词,如set ...
- Dell 服务器安装方法介绍
大家都知道dell服务器在安装windows系统时都需要有raid卡驱动的加载才可以人道服务器硬盘,下面来介绍一下dell服务器raid卡驱动的加载和系统的安装: 方法一: 使用dell服务器自带的 ...
- linux 版本号的查看
1.# uname -a (Linux查看版本当前操作系统内核信息) Linux localhost.localdomain 2.4.20-8 #1 Thu Mar 13 17:54:28 E ...
- 把Linq查询返回的var类型的数据 转换为DataTable EF连接查询
问题:我要获得一个角色下对应的所有用户,需要两表连接查询,虽然返回的只有用户数据,但是我想到若是返回的不只是用户数据,而还要加上角色信息,那么我返回什么类型呢,返回var吗,这样不行. 于是我网上找找 ...
- PAT 1079 延迟的回文数(代码+思路)
1079 延迟的回文数(20 分) 给定一个 k+1 位的正整数 N,写成 ak⋯a1a0 的形式,其中对所有 i 有 0≤ai<10 且 ak>0.N 被称 ...
- Laravel - Opening Multiple Projects
On this page: Basics Opening multiple projects Deleting a project from view Important notes Basics P ...
- 关于apicloud图片缓存
imageCache如果是同一个地址,得到的缓存文件名字是一样的.可能是对url md5了一下. apicloud目前有两种清除方式1 一种是api.clearCache 另一种方法当然是强大的 ...
- HBase Filter程序样例及Shell(图)
==过滤器执行流程== reset() : reset the filter state before filtering a new row. filterAllRemaining(): true ...