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作为对象键值的更多相关文章

  1. JavaScript中的Function(函数)对象详解

    JavaScript中的Function对象是函数,函数的用途分为3类: 作为普通逻辑代码容器: 作为对象方法: 作为构造函数. 1.作为普通逻辑代码容器 function multiply(x, y ...

  2. javascript中的内置对象

    2015.12.1 javascript中的内置对象 复习: 1.js中的内置函数 alert prompt write parseInt parseFloat eval isNaN document ...

  3. (转载)JavaScript中的Window窗口对象

    (转载)http://www.ijavascript.cn/jiaocheng/javascript-window-65.html 例子: <html> <head> < ...

  4. javaScript中Math内置对象基本方法入门

    概念 Math 是javaScript的内置对象,包含了部分数学常数属性和数学函数方法. Math 不是一个函数对象,用户Number类型进行使用,不支持BigInt. Math 的所有属性与方法都是 ...

  5. javascript中遇到的字符串对象处理

    在javascript中对参数处理: 1 <script> 2 function getParam() 3 { 4 urlInfo=window.location.href; //获取当前 ...

  6. JavaScript中的类方法、对象方法、原型方法

    类方法:也叫函数方法,在JavaScript中函数也是一个对象,所以可以为函数添加属性以及方法: 对象方法:包括构造函数中的方法以及其原型上面的方法: 原型方法:一般用于对象实例共享,在原型上面添加该 ...

  7. js关于对象键值为数字型时输出的对象自动排序问题的解决方法

    一.对象键值为数字型时输出的对象自动排序问题如: var objs = {    "1603":{id:"1603"},    "1702" ...

  8. Delphi中一些常用的组合键值

    Delphi中一些常用的组合键值  CTRL+A: #1  CTRL+B: #2  CTRL+C: #3  CTRL+D: #4  CTRL+E: #5  CTRL+F: #6  CTRL+G: #7 ...

  9. javascript中的function命名空間與模擬getter、setter

    function的命名空間 在javascript中,function也可以擁有自己的命名空間例如以下這段程式碼: 12345678 function () { return 'I am A';} A ...

随机推荐

  1. cloudrea manager 调整datanode数据存储目录

    由于datanode所需磁盘空间较大,所以工作中可能会涉及到给datanode增加磁盘目录或者更改数据目录 CM停止该datanode节点 CM页面增加目录或者修改目录 如果是修改目录的话 需要将服务 ...

  2. 2.Add Two Numbers (List)

    You are given two linked lists representing two non-negative numbers. The digits are stored in rever ...

  3. WIN7系统IIS上发布站点后水印效果失效的解决方法

    关于使用一般处理程序给图片添加水印的方法,请参考: 使用一般处理程序(IHttpHandler)制作图片水印 有些时候,给图片添加水印了,在本机运行也都正常,但是发布到IIS上后就没有水印效果了.本人 ...

  4. My97DatePicker 日历控件

    My97DatePicker 是一款非常强大的日历控件,使用也非常简单,也能修改源码,牛逼我就不吹了,自己用用看 使用 1.引入 <script language="javascrip ...

  5. Message: u'The given selector btn dropdown-toggle btn-info is either invalid or does not result in a WebElement

    html代码: <html> <head> <meta http-equiv="content-type" content="text/ht ...

  6. vue2.0 tab切换几种方式

    第一种 比较灵活简单的方式(切换改变部分的内容在组件中比较方便操作) <template> <div id="app"> <ul> <li ...

  7. IG—金字塔

    博客链接 选择困难症的福音--团队Scrum冲刺阶段-Day 1领航 选择困难症的福音--团队Scrum冲刺阶段-Day 2 选择困难症的福音--团队Scrum冲刺阶段-Day 3 选择困难症的福音- ...

  8. Mac下PHP+MySQL+Apache2环境搭建

    本机系统信息如下: -------------------------------------------------------------------------------------- OS: ...

  9. 情境领导II

    情境领导理论认为,领导者的行为要与被领导者的准备程度相适应,才能取得有效的领导效果,也就是说领导风格不是一成不变的,而要根据环境及员工的变化而改变. 三大技巧分别为诊断.弹性与约定领导型态.诊断是评估 ...

  10. 2018.08.01 BZOJ4552: [Tjoi2016&Heoi2016]排序(二分+线段树)

    传送门 线段树简单题. 二分答案+线段树排序. 实际上就是二分答案mid" role="presentation" style="position: relat ...