javascript - 替换私有(private)范围变量中的 eval

标签 javascript jquery eval scope

我正在尝试删除此函数中的 eval 语句。我习惯了 this[whatever] 样式替换,但在这种情况下它不起作用。 看看:

var App = (function(fw) {
    var somevar1 = "hello";
    var somevar2 = "world";
    this.get = function(what) {
        return eval(what);
    }
});

var app = new App({some: "thing"});

// now for the use:
console.log(app.get("somevar1"),app);​

在该函数中,我所有正常的“eval擦洗”选项都不起作用,例如,我无法使用:

 return this[what]
 return [what]
 return app[what]
 return new Function(what);

这肯定不是需要 eval 的奇怪情况吗? .. ps 我必须注意,我无法重新调整 App 内变量的范围,因为它是庞大代码库的一部分。

这里有一些需要摆弄的东西:

http://jsfiddle.net/xAVYa/

最佳答案

不幸的是,你运气不好; eval唯一可以访问此类变量的东西。下次不要再这样做了:)

您可以通过保留data对象来开始迁移:

var App = (function(fw) {
    var data = {
        somevar1: "hello",
        somevar2: "world"
    };

    this.get = function(what) {
        return data[what];
    };
});

然后在您看到的整个代码库中逐步执行此操作。它不应该破坏任何东西。

关于javascript - 替换私有(private)范围变量中的 eval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9986382/

相关文章:

javascript - 如何通过title属性获取<a>

javascript - 值未获取 - Angular JS

php - 使用 jQuery 将 html 代码发布到 PHP

javascript - 如何正确解释作为字符串接收的 JSON 对象?

php - 也许 PHP eval 范围的事情?

javascript - 通过使用 Jquery 插入 javascript 加载 LinkedIn 成员(member)个人资料

javascript - knockout 下拉选择列表将名称/值对数组绑定(bind)到 observablearray

javascript - 如何在没有 eval() 的情况下通过 ExtJS AJAX 调用执行 Javascript,就像使用 JQuery 一样?

javascript - 没有 JQuery 的 Vanilla Javascript .fadein() .fadeOut()

javascript - 最大数量池从数据库输入文本,并在选择形成 html/js/php 时减少它