WEB开发网
开发学院网页设计JavaScript JavaScript对象模型 阅读

JavaScript对象模型

 2010-09-14 13:20:17 来源:WEB开发网   
核心提示: 本地属性与继承属性对象通过隐式Prototype链能够实现属性和方法的继承,但prototype也是一个普通对象,JavaScript对象模型(7),就是说它是一个普通的实例化的对象,而不是纯粹抽象的数据结构描述,实例对象cf1具有本地属性q1, q2以及继承属性CFP1,如果执行cf1.

本地属性与继承属性

对象通过隐式Prototype链能够实现属性和方法的继承,但prototype也是一个普通对象,就是说它是一个普通的实例化的对象,而不是纯粹抽象的数据结构描述。所以就有了这个本地属性与继承属性的问题。

首先看一下设置对象属性时的处理过程。JS定义了一组attribute,用来描述对象的属性property,以表明属性property是否可以在JavaScript代码中设值、被for in枚举等。

obj.propName=value的赋值语句处理步骤如下:

1. 如果propName的attribute设置为不能设值,则返回

2. 如果obj.propName不存在,则为obj创建一个属性,名称为propName

3. 将obj.propName的值设为value

可以看到,设值过程并不会考虑Prototype链,道理很明显,obj的内部[[Prototype]]是一个实例化的对象,它不仅仅向obj共享属性,还可能向其它对象共享属性,修改它可能影响其它对象。

用上面CF, Cfp的示例来说明,实例对象cf1具有本地属性q1, q2以及继承属性CFP1,如果执行cf1.CFP1="",那么cf1就具有本地属性CFP1了,测试结果如下:

//PassedinFF2.0,IE7,Opera9.25,Safari3.0.4
varcf1=newCF("aaa","bbb");
varcf2=newCF(111,222);
document.write(cf1.CFP1+"<br/>");//result:CFP1inCfp
document.write(cf2.CFP1+"<br/>");//result:CFP1inCfp
//it will result in a local property in cf1
cf1.CFP1="newvalueforcf1";
//changes on CF.prototype.CFP1 will affect cf2 but not cf1, because there's already a local property with
//the name CFP1 in cf1, but no such one in cf2
CF.prototype.CFP1="newvalueforCfp";
document.write(cf1.CFP1+"<br/>");//result:newvalueforcf1
document.write(cf2.CFP1+"<br/>");//result:newvalueforCfp

上一页  2 3 4 5 6 7 8 9 10  下一页

Tags:JavaScript 对象 模型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接