javascript中实现反射

今天在群里有人问这样一个问题:

string name = "xxx";
string key = ???;
Console.Write(key);//输出name

问号处怎么写?三句代码的问题,想要实现可不容易啊,而且这位仁兄问的是如何用C#来实现,学过C#的人都知道,C#是强类型语言,在.NET里,可以使用System.Reflection.Assembly.Load来实现反射。不过这里我觉得没有确定类型,用反射冒似也无法实现(不确定,有时间去复习一下MSDN),好久没有折腾过C#了,一直在玩前端,第一反应就是用JS来实现这位仁兄的问题,尽管不是他想要的,嘿嘿。没关系,我自己写着玩儿。

<script type="text/javascript">
var name = "superman";
var key = (function() {
    for (var item in window) {
        if (window[item] === "superman") {
            return item;
        }
    }
})();
alert(key);
</script>

这样就实现了反射功能,在.NET中反射是很耗性能的,在Javascript里,不太懂它的引擎,故也不清楚性能有否影响。我想性能耗费应该等于0(直觉),嘿嘿。

太多东西需要学了,多记录成长点滴,欢迎拍砖。欢迎讨论!

4 Comments

  1. 胡杨 说:

    var name = “superman”;var key = (function() { for (var item in window) { if (window[item] === “superman”) { return item; } }})();alert(key);
    建议改成这样~
    var name = “superman”;var key = (function() { for (var item in this) { if (window[item] === “superman”) { return item; } }})();alert(key);

  2. wsenmin 说:

    var name = “superman”;var key = (function() { for (var item in window) {
    if (window[item] === “superman1″) //这样的话就报错
    { return item; } }})();alert(key);

  3. wsenmin 说:

    不好意思 我搞错了 if (window[item] == “superman1″) 两个等于号就报错,请问三个等于号什么意思??

  4. wsenmin 说:

    是比较引用么

Leave a Reply