JavaScript 对象学习笔记(下)

来源:互联网 发布:梦幻西游mac右键 编辑:程序博客网 时间:2024/05/22 06:14

前面两篇讲解了对象的概念和创建方式 JavaScript 对象学习笔记(上)、Object.create()方法和对象属性访问、设置 JavaScript 对象学习笔记(中)。


上篇提到:

object.property;//使用点运算符访问对象属性object["property"]//使用中括号标识符访问对象属性

这两个表达式的值是相同的

第一种语法使用点运算符和一个标识符,这和C语言和Java语言访问一个结构体或者对象的静态字段非常相似。第二种方式看起来更像是数组,只是这种数组元素是通过字符串索引而不是数字索引。这种数组就是关联数组(associative array),JavaScript中的对象都是关联数组。当通过 [] 来访问对象的属性时。属性名通过字符串来表示,字符串是JavaScript的数据类型,在程序云的的时候可以修改和创建它们。

var customer = {        address0 : "china",        address1 : "guangdong",        address2 : "guangzhou",        address3 : "yuexiu"};//定义一个对象var addr = ""//用来储存遍历对象的属性值for(var i = 0; i < 4; i++){    addr += customer["address" + i] + '\t';//动态访问对象的属性值}console.log(addr);//china   guangdong   guangzhou   yuexiu  

对象继承


JavaScript对象具有”自有属性”(own property),也有一些属性是从原型对象继承而来的本篇中会使用到 inherit() 函数,可以查看JavaScript 对象学习笔记(中)和 JavaScript prototype学习笔记 了解 inherit() 函数和 prototype 属性。


假如要查询对象obj中的属性attr,如果obj中不存在attr,那么将会在obj的原型对象中查询attr,如果原型对象中也没有的attr属性的话,但是这个原型对象也有原型,那么继续在在这个原型对象的原型上查询,直到找到attr或者查找到一个原型对象是null的对象为止,对象的原型对象构成了一个“链”,通过这个“链”可以实现属性的继承。

var obj = {}//obj从Object.prototype继承对象的方法obj.attr = 1;//obj定义一个属性attrvar p = inherit(obj);//p继承obj和Object.prototypep.x = 2;//p定义一个属性xvar q = inherit(p);//q继承p和Object.prototype、objq.z = 3;//q定义一个属性zvar str = q.toString();//toString继承自Object.prototypeconsole.log("q-->" + q.attr + q.x);//q-->12

对象q结构:
对象结构图


跟着上面的例子,假设给对象obj的属性attr赋值,如果obj中已经有了attr属性(这个属性是自有属性),那么这个赋值只会改变这个已有的attr属性,如果obj中不存在attr属性,那么赋值操作会给obj对象添加一个新的属性attr,如果之前obj继承自attr属性,那么继承的attr属性将会被新创建的同名属性覆盖。

var unitcircle = {r : 1};//用来继承的属性var obj = inherit(unitcircle);//obj继承属性rc.x = 1; c.y = 2;//定义两个属性c.r = 3;//c覆盖继承来的属性c.r;//3unitcircle.r;//1,原型对象的属性没有改变
0 0
原创粉丝点击