对象属性的查询和设置

访问对象的两种方法

    object.property                  第一种语法使用点运算符和一个标识符

    object["property"]    第二种语法使用一个方括号加字符串,   (这样看起来很像数组,只是这个数组是通过字符串索引,而不是数字索引) 这种数组就是我们说的关联数组,也称作散列,映射,或则字典

注意javascript 中对象都是关联数组

 

由于javascript是弱类型语言,所以在任何对象中都可以创建任意数量的属性,但是通过点(.)运算符来访问对象的属性时,属性名需要用一个标识符来表示,标识符必须是出现在javascript程序中它们不是数据类型,因此无法修改他们。但通过 [ ] 来访问对象的属性时,属性名通过字符串表示。字符串时javascript的数据类型,在程序运行可以修改和创建他们,因此可以在javascript中使用下面这种代码

var address ="";
for ( i=0; i<4;i++){
      addr  +=customer[ "address" + i] +'\n';  
}
//这段代码读取 customer对象的 address0  , address 1.。。。。并将他们联系起来

这个例子主要说明   使用数组写法和字符串表达式来访问对象的属性的灵活性。这段代码也可以通过点运算符来重写,但是很多场景中只能使用数组写法来完成

 

对象的继承

javascript对象具有自由属性,也有一些属性是从原型对象继承而来的,

  假设我们有个对象   o    和属性 x    当我们查询对象 o 的 x 属性,如果 o 中不存在 x 属性 ,那么将会继续在 o 的原型的对象中查询属性 x 。如果原型对象上也没有,但这个原型也有原型,那么继续在这个原型对象上的原型上执行查询知道找到 x 或者查找到一个原型是 null 的对象。可以看到对象的原型属性构成了一个链,通过这个链可以实现属性的继承。

  现在假设对象o的属性x赋值,如果o中已经有属性x(这个属性不是继承来的)那么这个赋值操作只能改变 这个已有属性的值,如果o中不存在属性x,那么赋值操作o添加一个新的属性x、如果之前o继承自属性x,如果o继承的自属性x 那么这个继承属性就被新创建的同名的属性覆盖了

      注:赋值操作首先检查原型链,以此来判断是否允许赋值操作  

 

posted @ 2018-01-02 15:59  peter-钱  阅读(533)  评论(0编辑  收藏  举报