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. 神经网络出现nan原因?以及解决

    之前在TensorFlow中实现不同的神经网络,作为新手,发现经常会出现计算的loss中,出现Nan值的情况,总的来说,TensorFlow中出现Nan值的情况有两种,一种是在loss中计算后得到了N ...

  2. 如何搭建hibernate框架

    我写这篇博客,主要是想让大家能够快速上手hibernate,本人建议学习框架,应该一个框架一个框架学习,别一上手就三大框架整合,学习之类的.这里只是单独搭建hibernate框架,让大家 能够更好的上 ...

  3. 51. N-Queens (Array; Back-Track, Bit)

    The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two queens ...

  4. php页面的基本语法

    概述: 1. PHP 脚本在服务器上执行,然后将纯 HTML 结果发送回浏览器. 2. PHP 脚本以 <?php 开始,以 ?> 结束,可以放到文档中的任何位置. 3. 当 PHP 解析 ...

  5. popupMenu-----弹出菜单

    import android.os.Bundle; import android.app.Activity; import android.graphics.Color; import android ...

  6. 安装phpcms时出现Warning: ob_start(): output handler \'ob_gzhandler\' conflicts with \'zlib

    1. 解决方法一: 打开phpcms/base.php,在第57行,修改如下: if(pc_base::load_config('system','gzip') && function ...

  7. 20172325 2017-2018-2 《Java程序设计》第七周学习总结

    20172325 2017-2018-2 <Java程序设计>第七周学习总结 教材学习内容总结 1.创建子类 (1) 子类是父类更具体的版本,但子类的实例化不依赖于父类: (2) 继承有单 ...

  8. 5条面经,助你成功拿到UX设计师Offer

    为什么成为 UX设计师?   如果你经常逛推酷, 知乎, 设计达人或者一些专业的设计师论坛,博客,你会发现,第一批成为UX设计师的人,其实是误打误撞地落入这个行业的.那时候人们并不清楚UX设计师是什么 ...

  9. Notepad++ 中如何将代码格式化

    Notepad++ 中如何将代码格式化   在阅读别人的代码时偶尔会遇到格式很乱,阅读起来很费劲的情况,若手动改,很容易出错且很费时间,这时可以借助一些专业的编辑器来格式化代码,NotePad++是一 ...

  10. 前端之JavaScript笔记2

    一 数组对象 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...