无法通过eval()函数更新变量

时间:2014-04-11 16:53:15

标签: javascript oop

我会尽量保持清醒。我在Javascript中有一个DVD对象。它有一小部分属性,分配给它。我希望能够通过传递属性的名称来改变它们的值,而不是为每个不同的属性设置一个函数,但我似乎无法完成它并且我非常确定它&# 39;因为我对eval()函数不太熟悉。

以下是我使用的代码:

function DVDItem()
{
    var Properties = { 
              DVDShortName: "",  
              HasActivationKey: true, 
              NetInstFolderName: "", 
              AddTitlesCheck: true, 
              LocalTestCheck: true, } 

    this.updateProperty = function(propertyName, propertyValue)
    {
        var specificProperty = eval("Properties." + propertyName);
        specificProperty = propertyValue;
    }
}

这种方式我可以声明一个对象并改变它的属性:

var DVD1 = new DVDItem();
DVD1.updateProperty("HasActivationkey", false);

但我没有正确地做某事,因为这不起作用。 任何想法?

由于

2 个答案:

答案 0 :(得分:5)

试试这个:

function DVDItem() {
    var Properties = { 
        DVDShortName: "",  
        HasActivationKey: true, 
        NetInstFolderName: "", 
        AddTitlesCheck: true, 
        LocalTestCheck: true, 
    } 

    this.updateProperty = function(propertyName, propertyValue) {
        Properties[propertyName] = propertyValue;
    }
}

常见的约定是使getter和setter函数相同,如下所示:

function DVDItem() {
    var attrs = {
        DVDShortName: "",
        HasActivationKey: true,
        NetInstFolderName: "",
        AddTitlesCheck: true,
        LocalTestCheck: true
    }

    this.attr = function(key, value) {
        if(value !== undefined){
            return this.attrs[key] = value;
        }else{
            return this.attrs[key];
        }
    }
}

至于eval(),这是来自MDN文档的内容:

  

eval()是一个危险的函数,它执行它传递的代码   具有来电者的特权。如果使用字符串运行eval()   可能会受到恶意方的影响,您最终可能会运行   具有您的权限的用户计算机上的恶意代码   网页/扩展程序。更重要的是,第三方代码可以看到   调用eval()的范围,可能导致可能的攻击   以类似功能不易受影响的方式。

     

eval()通常也比替代品慢,因为它必须   调用JS解释器,同时优化许多其他构造   通过现代JS引擎。

     

对于常见的eval()有安全(和快速!)的替代方案   用例。

了解更多here

答案 1 :(得分:3)

在这种情况下,您不需要使用eval 你可以简单地得到你想要的东西:

Properties[propertyName]

阅读关于eval:Why I Should not using it?

的内容