我正在开发一个我们的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();
});
答案 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();
}