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

JavaScript对象模型

 2010-09-14 13:20:17 来源:WEB开发网   
核心提示: 使用obj.propName访问一个对象的属性时,按照下面的步骤进行处理(假设obj的内部[[Prototype]]属性名为__proto__):1. 如果obj存在propName属性,JavaScript对象模型(4),返回属性的值,否则2. 如果obj.__proto__为null,

使用obj.propName访问一个对象的属性时,按照下面的步骤进行处理(假设obj的内部[[Prototype]]属性名为__proto__):

1. 如果obj存在propName属性,返回属性的值,否则

2. 如果obj.__proto__为null,返回undefined,否则

3. 返回obj.__proto__.propName

调用对象的方法跟访问属性搜索过程一样,因为方法的函数对象就是对象的一个属性值。

提示: 上面步骤中隐含了一个递归过程,步骤3中obj.__proto__是另外一个对象,同样将采用1, 2, 3这样的步骤来搜索propName属性。

例如下图所示,object1将具备属性prop1, prop2, prop3以及方法fn1, fn2, fn3。图中虚线箭头表示prototype链。

JavaScript对象模型

这就是基于Prototype的继承和共享。其中object1的方法fn2来自object2,概念上即object2重写了object3的方法fn2。

JavaScript对象应当都通过prototype链关联起来,最顶层是Object,即对象都派生自Object类型。

类似C++等面向对象语言用类(被抽象了的类型)来承载方法,用对象(实例化对象)承载属性,Prototype语言只用实例化的对象来承载方法和属性。本质区别是前者基于内存结构的描述来实现继承,后者基于具体的内存块实现。

对象创建过程

JS中只有函数对象具备类的概念,因此要创建一个对象,必须使用函数对象。函数对象内部有[[Construct]]方法和[[Call]]方法,[[Construct]]用于构造对象,[[Call]]用于函数调用,只有使用new操作符时才触发[[Construct]]逻辑。

var obj=new Object(); 是使用内置的Object这个函数对象创建实例化对象obj。var obj={};和var obj=[];这种代码将由JS引擎触发Object的构造过程。function fn(){}; var myObj=new fn();是使用用户定义的类型创建实例化对象。

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

Tags:JavaScript 对象 模型

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