2011-12-30 144 views
0

首先,让我警告你,我不是一个JavaScript大师。 我已经找到了关于这个主题的几个问题,但几乎所有的答案都是相同的解决方案。 我有一个简单的自定义JavaScript对象:Javascript属性反射

var errorMsg ={ 
     msg1 : "x", 
     msg2 : "y", 
     msg3 : "z", 
     msg4 : "t" 
} 

,我想从像[“MSG1”,“MSG 2”,“消息3”,“MSG4”]对象的所有属性名称。 就像我告诉的几乎所有使用for/in循环遍历所有属性名称的解决方案一样。但我的应用程序将运行在IE6及以上,我研究IE不支持此循环或至少IE6。那我能做些什么? 最后一个问题是,我在哪里可以找到一个很好的JavaScript参考?我看到Object有一个返回像Object.keys()这样的键的方法,我可以在哪里找到一个很好的参考,它提供了与构建在对象中的JavaScript相关的所有属性和方法?

+2

MDN是这样的事情最好的资源:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object – 2011-12-30 17:57:19

+1

你在哪里看过IE6不支持'for ... in'?关于参考:https://developer.mozilla.org/en/JavaScript/Reference – 2011-12-30 17:57:46

+0

另外,IE6几乎死了,帮助它死亡.... http://www.ie6countdown.com/ – lostinplace 2011-12-30 18:15:05

回答

0

你可以定义一个通用的方法可以从任何对象返回键的阵列, 和使用功能的调用方法将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 
*/ 
0

首先,请参阅我们刚才讨论的Does Javascript have an enhanced for loop syntax similar to Java's。但是因为你在这里使用的是对象而不是数组,所以并不是所有的答案都适用。在这里,您需要确保您使用的解决方案涉及hasOwnProperty

就参考而言,我总是用https://developer.mozilla.org/en/JavaScript/Reference。那里列出的所有东西都有很高的质量。请注意,并非列出的所有内容都适用于所有浏览器。

0

如果for-in没有选项,则可以使用包含消息对象的数组。您可以使用这种方式的循环标准。

var errorMsg = [ 
     { name : "msg1", value : "x" }, 
     { name : "msg2", value : "y" }, 
     { name : "msg3", value : "z" }, 
     { name : "msg4", value : "t" } 
]; 

您无法通过名称来访问信息更多,但 - 映射消息名称索引中errorMsg可能是一种解决方法。