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屬性,但該屬性實際并不存在。在瀏覽器中瀏覽該頁面,如下所示