JavaScriptprototype背后的工作原理.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JavaScriptprototype背后的工作原理

 HYPERLINK /librarys/veda/detail/587 JavaScript prototype背后的工作原理 “prototype”字面翻译是“原型”,是javascript实现继承的主要手段。粗略来说就是:prototype是javascript中的函数(function)的一个保留属性,并且它的值是一个对象(我们可以称这个对象为prototype对象)。 通过以此函数作为构造函数构造出来的对象都自动的拥有构造函数的prototype对象的成员属性和方法。 其中的要点是: prototype是函数(function)的一个必备属性(书面一点的说法是保留属性)(只要是function,就一定有一个prototype属性) prototype的值是一个对象 可以任意修改函数的prototype属性的值。 一个对象会自动拥有这个对象的构造函数的prototype的成员属性和方法。  HYPERLINK /librarys/veda/detail/587 \l viewSource \o view source view source  HYPERLINK /librarys/veda/detail/587 \l printSource \o print print HYPERLINK /librarys/veda/detail/587 \l about \o ? ? 01//定义一个函数(构造函数),并定义一些属性和方法用来给另外一个构造函数构造出来的对象继承 02var function1=function(){  03????=function1; 04????this.saySomething=function(){alert(Thiss a method of +);}//定义一个方法  05} 06?? 07//定义另外一个构造函数 08var function2=function(){  09??????10}  11??12//将构造函数function2的prototype属性设置为一个由function1构造出来的对象,以便使由function2构造出来的对象(并且原本是没有任何属性和方法的对象)拥有function1的属性和方法  13totype=new function1(); 14var obj1=new function1();  15//obj1本来什么成员也没有,多得prototype机制,是它坐享其成地拥有了function1对象的属性和方法。 16obj1.saySomething();当然,上述例子离真正实际上使用的“继承”还相差甚远,但也体现出继承的意义:一个对象拥有了另一个对象的属性和方法。(如儿子拥有了老爸的血型和脾气,人类继承了动物的本能如进食和打斗等等) 以上部分大概阐述了prototype的概念和作用,但单凭这些还不够对prototype加深认识。现在来看看prototype背后是怎样工作的: 先来看看用new形式创建对象的过程:  HYPERLINK /librarys/veda/detail/587 \l viewSource \o view source view source  HYPERLINK /librarys/veda/detail/587 \l printSource \o print print HYPERLINK /librarys/veda/detail/587 \l about \o ? ? 1//以func()作为构造函数创建一个对象obj 2var obj=new func();这个过程是这样的:javascript引擎首先遇到了关键字new后,马上开辟了一块内存,创建了一个空对象(并且将this指向这个对象),接着执行构造函数func()对这个空对象进行构造(构造函数里面有什么属性和方法都一一给这个空白对象装配上去,这也就是为什么构造函数叫“构造函数”的原因)。 其实,new和执行构造函数之间还有一件事引擎没有显式地告诉我们,而是偷偷地做了,这就是给这个空对象赋予prototype对象。 这里不得不提到一个跟prototype一样同样是系统保留而且同样重要的东西???__proto__ __proto__是一个对象自动拥有的内置属性(请注意:prototype是函数的内置属性,__proto__是对象的内置属性,但它们最终都指向同一个对象,就是那个用来被继承的对象),用chrome和FF都可以访问到一个对象的__proto__属性,IE就不可以。 正是一个对象的__proto

文档评论(0)

2017ll + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档