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

JavaScript对象模型

 2010-09-14 13:20:17 来源:WEB开发网   
核心提示: new Fn(args)的创建过程如下(即函数对象的[[Construct]]方法处理逻辑,对象的创建过程),JavaScript对象模型(5),另外函数对象本身的创建过程(指定义函数或者用Function创建函数对象等方式)虽然也使用了下面的处理逻辑,但有特殊的地方,函数的prototy

new Fn(args)的创建过程如下(即函数对象的[[Construct]]方法处理逻辑,对象的创建过程)。另外函数对象本身的创建过程(指定义函数或者用Function创建函数对象等方式)虽然也使用了下面的处理逻辑,但有特殊的地方,后面再描述。

1. 创建一个build-in object对象obj并初始化

2. 如果Fn.prototype是Object类型,则将obj的内部[[Prototype]]设置为Fn.prototype,否则obj的[[Prototype]]将为其初始化值(即Object.prototype)

3. 将obj作为this,使用args参数调用Fn的内部[[Call]]方法

3.1 内部[[Call]]方法创建当前执行上下文

3.2 调用F的函数体

3.3 销毁当前的执行上下文

3.4 返回F函数体的返回值,如果F的函数体没有返回值则返回undefined

4. 如果[[Call]]的返回值是Object类型,则返回这个值,否则返回obj

注意步骤2中, prototype指对象显示的prototype属性,而[[Prototype]]则代表对象内部Prototype属性(隐式的)。

构成对象Prototype链的是内部隐式的[[Prototype]],而并非对象显示的prototype属性。显示的prototype只有在函数对象上才有意义,从上面的创建过程可以看到,函数的prototype被赋给派生对象隐式[[Prototype]]属性,这样根据Prototype规则,派生对象和函数的prototype对象之间才存在继承关系。

用代码来做一些验证:

//Passed in FF2.0,IE7,Opera9.25,Safari3.0.4
functionfn(){}
//thevalueofimplicit[[Prototype]]propertyofthoseobjectsderivedfromfnwillbeassigned to fn.prototype
fn.prototype={attr1:"aaa",attr2:"bbb"};
varobj=newfn();
document.write(obj.attr1+"<br/>");//result:aaa
document.write(obj.attr2+"<br/>");//result:bbb
document.write(objinstanceoffn);//result:true
document.write("<br/>");
//Ichangetheprototypeoffnhere,sobythealgorithmofPrototypetheobjisnolongertheinstanceoffn,
//butthiswon'taffecttheobjandits[[Prototype]]property,andtheobjstillhasattr1andattr2properties
fn.prototype={};
document.write(obj.attr1+"<br/>");//result:aaa
document.write(obj.attr2+"<br/>");//result:bbb
document.write(objinstanceoffn);//result:false

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

Tags:JavaScript 对象 模型

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