Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问动态命名的对象属性_Javascript_Javascript Objects - Fatal编程技术网

Javascript 访问动态命名的对象属性

Javascript 访问动态命名的对象属性,javascript,javascript-objects,Javascript,Javascript Objects,我正在创建一个javavascript对象,我称之为rulesObject。其思想是,它是一个javascript对象,包含我需要检查的所有规则,以启用/禁用在脚本开始时从mysql数据库动态生成的其他复选框。现在,我只是用两条规则来测试它,我知道这两条规则创建了我正在寻找的场景,所以现在我的对象是这样的: rulesObject = { chk533570 : ["533577", "503671", "503667", "604028", "503661"],

我正在创建一个javavascript对象,我称之为rulesObject。其思想是,它是一个javascript对象,包含我需要检查的所有规则,以启用/禁用在脚本开始时从mysql数据库动态生成的其他复选框。现在,我只是用两条规则来测试它,我知道这两条规则创建了我正在寻找的场景,所以现在我的对象是这样的:

rulesObject = {
        chk533570 : ["533577", "503671", "503667", "604028", "503661"],
        chk503928 : ["533577", "533578","503671", "503666", "533576", "503667", "324201", "503221", "604028", "503668", "533580", "503669", "533579", "533581", "503670"]
};    
现在我需要做的是从这个对象中获取信息。如果我做一个简单的提醒(rulesObject.chk533570),它就可以完美地工作——提供我所需要的。但是,我需要做的是,通过运行以下命令,根据刚才单击的内容访问特定规则。因此,例如,如果我单击值为“533570”的复选框,它将执行以下操作:

$('input').click(function(){            
if(this.checked) { 
    checkRules(this.value, 'checked'); 
} else { 
    checkRules(this.value, 'unchecked'); 
}           
});    
(当然我在那里使用jQuery,但我在整个web应用程序中都使用它,所以我不介意来回使用。)

现在转到我的checkRules函数。它仍然非常简单,因为它处于开始阶段——我只想提醒我刚刚选择的内容的价值。同样,如果我发出警报(rulesObject.chk533570),即使在函数中,我也会得到正确的结果,但我需要访问刚才选择的内容,因此我必须将字母“chk”添加到对象属性名称的开头,然后附加justselected值(在本例中等于533570)。以下是我尝试过的方法:

function checkRules(justselected, state) { 
        rulename= 'chk' + justselected;
        currentrules = rulesObject.rulename;

        alert(rulename);        
        alert(currentrules); 
}
警报1:CHK53370 警报2:未定义

function checkRules(justselected, state) { 
        rulename= 'chk' + justselected;

        alert(rulesObject.rulename); 
}     
警报:未定义

function checkRules(justselected, state) { 
        rulename= 'chk' + justselected;

        alert(rulesObject + '.chk' + justselected); 
}     
警报:[对象].chk533570

function checkRules(justselected, state) {     
        alert(rulesObject.chk533570);
}     
警报:533577503671503667604028503661


那么,你知道如何正确地称呼这个名字,以便得到正确的结果吗?我还尝试了完全不使用“chk”,但javascript对象不喜欢完全数字属性。

obj.key
obj['key']
相同,但第二种方式是键可以是动态的,因为它是一个普通的javascript表达式

因此,您只需使用
rulesObject['chk'+justselected]

function checkRules(justselected, state) {     
        alert(rulesObject['chk' + justselected]);
}


很久以前,人们习惯于使用
alert(eval('rulesObject.chk'+justselected))顺便说一下。当此选项起作用时,不要使用此选项。应始终避免使用
eval()
;在这种情况下,还有一种更干净的方法。

非常感谢您。一旦它让我接受这个(它告诉我必须等11分钟),我就要去。这正是我需要的!啊,感谢您对不使用eval的补充说明!副本