我可以避免在此示例中使用eval

时间:2014-11-17 07:37:26

标签: javascript eval

我正在开发一个我们的UI开发人员可以使用的javascript模板。但我无法找到摆脱eval的方法。有人能给我一个替换eval的方法吗?

/*jslint browser:true, passfail:false, sloppy:true, indent:4, maxerr:1000*/
/*global  $*/

var Main = {
    Init: function () {    
        this.Helper.Import("Main.Sliders");
    },

    Helper: {
        Import: function (classname) {
            var objectToInit = eval(classname);
            objectToInit.Init();
        },

        UserAgent: {
            IsIphone: navigator.userAgent.match(/iPhone|iPod/i) !== null,
            IsIos: navigator.userAgent.match(/iPhone|iPad|iPod/i) !== null,
            IsAndroid: navigator.userAgent.match(/Android/i) !== null
        }
    },

    Sliders: {
        Init: function () {
            alert('dada');
        }
    }
};

$(document).ready(function () {
    Main.Init();
});

2 个答案:

答案 0 :(得分:0)



var Main = {
    Init: function () {    
        this.Helper.Import("Main.Sliders");
   },

    Helper: {
        Import: function (classname) {
            var trail = classname.split('.');
            var current = window;
            while ((subobj = trail.shift())) {
              current = current[subobj];
            }
            current.Init();
        },
    },

    Sliders: {
        Init: function () {
            alert('dada');
        }
    }
};

Main.Init();




但是,Main.Sliders.Init()更容易。是否有特殊原因需要将对象名称放在字符串中?

答案 1 :(得分:0)

在javascript中不存在动态变量购买动态属性。

Import: function (classname) {
            var arr = classname.split('.'),
                length = arr.length,
                objectToInit = /*current context of the variable Main*/,
                tmp = objectToInit,
                i = 0;
            while(i < length) {
                tmp = tmp[arr[i]]; 
                i++;
            }
            tmp.Init();
        }