我会尽量保持清醒。我在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);
但我没有正确地做某事,因为这不起作用。 任何想法?
由于
答案 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)