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]);
    }
    
  • 相关阅读:
    以后努力,每天写博客!
    无题
    Fainting
    明天任务
    hdu 4022 Bombing(map)
    codeforces 1216E1 Numerical Sequence (easy version) (前缀和/二分)
    CodeForces 1176E Cover it!
    codeforces 1234D Distinct Characters Queries
    codeforces 1249C2 Good Numbers (hard version)
    codeforces 913B Christmas Spruce(树)
  • 原文地址:https://www.cnblogs.com/zhengwenwei/p/3185893.html
Copyright © 2011-2022 走看看