JAVAScript对象与纯粹的面向对象语言的对象存在一定的区别:JavaScript中的对象本质上是一个关联数组,或者说更像java里的Map数据结构,由一组key-value对组成。与java中Map对象存在区别的是,javaScript对象的value,不仅可以是值(包括基本类型的值和复合类型的值),也可以是函数,此时的函数就是该对象的方法。当value是基本类型的值或者复合类型的值时,此时的value就是该对象的属性值。
因此当需要访问某个javaScript对象的属性时,不仅可以使用obj。propName的形式,也可以采用obj[propName]的形式,有些时候甚至必须使用这种形式。
<script type="text/javascript">
function Person(name,age)
{
//将name、age形参的值分别赋给name、age实例属性
this.name=name;
this.age=age;
this.info=function()
{
alert('info method!');
}
}
var p=new Person('yeeku',30);
for(propName in p)
{
//遍历Person对象属性
document.writeln('p对象的'+propName+"属性值为:"+p[propName]+"<br />");
}
</script>
上面程序中粗体字代码遍历了Person对象的每个属性,因为遍历每个属性时,循环计数器是Person对象的属性名,因此程序必须根据属性名来访问Person对象的属性,此时不能采用p.propName的形式,如果采用p.propName的形式,javaScript不会把propName当成变量处理,它试图直接访问该对象的propName属性,但该属性实际并不存在。在浏览器中浏览该页面,如下所示