Javascript属性反射
首先,让我警告你,我不是javascript大师。 我已经发现了一些关于这个话题的问题,但几乎所有的问题都用相同的答案回答。 我有一个简单的自定义javascript对象:Javascript属性反射,javascript,reflection,properties,Javascript,Reflection,Properties,首先,让我警告你,我不是javascript大师。 我已经发现了一些关于这个话题的问题,但几乎所有的问题都用相同的答案回答。 我有一个简单的自定义javascript对象: var errorMsg ={ msg1 : "x", msg2 : "y", msg3 : "z", msg4 : "t" } 我想从对象中获取所有属性名称,如[“msg1”、“msg2”、“msg3”、“msg4”]。 正如我所说,几乎所有的解决方案都指向使用for/in
var errorMsg ={
msg1 : "x",
msg2 : "y",
msg3 : "z",
msg4 : "t"
}
我想从对象中获取所有属性名称,如[“msg1”、“msg2”、“msg3”、“msg4”]。
正如我所说,几乎所有的解决方案都指向使用for/in循环来迭代所有属性名。但我的应用程序将在IE6及以上版本中运行,我研究发现IE不支持这个循环,至少不支持IE6。那我该怎么办?
最后一个问题是,在哪里可以找到好的javascript参考?我看到这个对象有一个返回键的方法,比如Object.keys(),我在哪里可以找到一个好的引用,它提供了与javascript内置对象相关的所有属性和方法?首先,看看我们刚才讨论的地方。但由于这里使用的是对象而不是数组,因此并非所有答案都适用。在这里,您需要确保使用的解决方案涉及hasOwnProperty
在引用方面,我总是使用。这里列出的所有东西都是高质量的。请注意,并不是所有列出的内容都会同样适用于所有浏览器。如果for in没有选项,您可以使用包含消息对象的数组。您可以通过这种方式使用标准for循环
var errorMsg = [
{ name : "msg1", value : "x" },
{ name : "msg2", value : "y" },
{ name : "msg3", value : "z" },
{ name : "msg4", value : "t" }
];
但是,您不能再通过名称访问消息了-将消息名称映射到
errorMsg
中的索引可能是一种解决方法。您可以定义一种通用方法,用于从任何对象返回键数组,
并使用函数的调用方法对errorMsg对象进行操作:
var errorMsg={
msg1:"x",
msg2:"y",
msg3:"z",
msg4:"t"
}
function keyArray(){
var A= [];
for(var p in this){
if(this.hasOwnProperty(p)) A.push(p);
}
return A;
}
keyArray.call(errorMsg)
/* returned value: (Array)
msg1,msg2,msg3,msg4
*/
MDN是解决这类问题的最佳资源:您在哪里读到IE6不支持for…in?关于参考:另外,IE6已经快死了,帮它死吧。。。。