JavaScript的对象模型选读.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
红色虚线表示隐式Prototype链。?这张对象模型图中包含了太多东西,不少地方需要仔细体会,可以写些测试代码进行验证。彻底理解了这张图,对JavaScript语言的了解也就差不多了。下面是一些补充说明:1. 图中有好几个地方提到build-in Function constructor,这是同一个对象,可以测试验证://Passed?in?FF2.0,?IE7,?Opera9.25,?Safari3.0.4Function==Function.constructor?//result:?trueFunction==Ftotype.constructor?//result:?trueFunction==Object.constructor?//result:?true//Function?also?equals?to?Number.constructor,?String.constructor,?Array.constructor,?RegExp.constructor,?etc.function?fn(){}Function==fn.constructor?//result:?true这说明了几个问题: Function指向系统内置的函数构造器(build-in Function constructor);Function具有自举性;系统中所有函数都是由Function构造。2. 左下角的obj1, obj2...objn范指用类似这样的代码创建的对象: function fn1(){}; var obj1=new fn1();??? 这些对象没有本地constructor方法,但它们将从Prototype链上得到一个继承的constructor方法,即totype.constructor,从函数对象的构造过程可以知道,它就是fn本身了。??? 右下角的obj1, obj2...objn范指用类似这样的代码创建的对象: var obj1=new Object();或var obj1={};或var obj1=new Number(123);或obj1=/\w+/;等等。所以这些对象Prototype链的指向、从Prototype链继承而来的 constructor的值(指它们的constructor是build-in Number constructor还是build-in Object constructor等)等依赖于具体的对象类型。另外注意的是,var obj=new Object(123);这样创建的对象,它的类型仍然是Number,即同样需要根据参数值的类型来确定。??? 同样它们也没有本地constructor,而是从Prototype链上获得继承的constructor方法,即build-in *** constructor,具体是哪一个由数据类型确定。3. 关于图中Prototype链的补充说明:Ototype是整个链的终结点,它的内部[[Prototype]]为null。所有函数的Prototype链都指向Ftotype。Function的Prototype链指向Ftotype,这是规范要求的,因为设计者将Function设计为具有自举性。 Function的Prototype链这样设计之后,Function.constructor==Function, Function instanceOf Function都为true。另外Function已经是最顶层的构造器,但Function本身也是一个函数对象,它必然是由某个东西创建出来的,这 样自举在语义上合情合理。Ftotype的Prototype链指向Ototype,这也是规范强制要求的。首先 Ftotype是Function的一个实例对象(typeof Ftotype可以知道它是一个Function,instanceOf无法通过测试,因为Prototype链在内部被额外设置 了),所以按照Prototype的规则,Ftotype的内部[[Prototype]]值应当为 Ftotype这个对象,即它的Prototype链指向自己本身。这样一方面在Prototype链上造成一个死循环,另一方面 它本身成为了一个终结点,结果就是所有函数对象将不是派生自Object了。加上这个强制要求之后,Prototype链只有唯一的一个终结点。4. 因为Ftotype是一个函数对象,所以它应当具有显示的prototype属性,即 Ftotype,但只有FireFox中可以访问到,IE、Opera、Safari都无法访问。所以图中用 了个表示不存在的符号。5. 用户自定义函数(user defined functions)默认情况下[[Prototype]]值是Ototype,

文档评论(0)

1112111 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档