zoukankan      html  css  js  c++  java
  • 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]);
    }
    
  • 相关阅读:
    Leetcode888. 公平的糖果棒交换
    Leetcode81. 搜索旋转排序数组 II
    Leetcode80. 删除排序数组中的重复项 II
    Leetcode1631. 最小体力消耗路径
    Leetcode57. 插入区间
    Leetcode724. 寻找数组的中心索引
    Leetcode18. 四数之和
    Leetcode110. 平衡二叉树
    Leetcode1128. 等价多米诺骨牌对的数量
    python 集合和深浅copy
  • 原文地址:https://www.cnblogs.com/zhengwenwei/p/3185893.html
Copyright © 2011-2022 走看看