- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JS中的phototype是JS中比较难理解的一个部分
本文基于下面几个知识点:
1 原型法设计模式
在.Net中可以使用clone()来实现原型法
原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是以A为原型的,并且能进行扩展。我们称B的原型为A。
2 javascript的方法可以分为三类:
a 类方法
b 对象方法
c 原型方法
例子:
function People(name){=name;//对象方法this.Introduce=function(){alert(My name is +);}}//类方法People.Run=function(){alert(I can run);}//原型方法Ptotype.IntroduceChinese=function(){alert(我的名字是+);} //测试var p1=new People(Windking);p1.Introduce();People.Run();p1.IntroduceChinese();
3 obj1.func.call(obj)方法
意思是将obj看成obj1,调用func方法
好了,下面一个一个问题解决:
prototype是什么含义?
javascript中的每个对象都有prototype属性,Javascript中对象的prototype属性的解释是:返回对象类型原型的引用。
A.prototype = new B();
理解prototype不应把它和继承混淆。A的prototype为B的一个实例,可以理解A将B中的方法和属性全部克隆了一遍。A能使用B的方法和属性。这里强调的是克隆而不是继承。可以出现这种情况:A的prototype是B的实例,同时B的prototype也是A的实例。
先看一个实验的例子:
function baseClass(){this.showMsg = function(){ alert(baseClass::showMsg); }}function extendClass(){}extendCtotype = new baseClass();instance = new extendClass();instance.showMsg(); // 显示baseClass::showMsg
我们首先定义了baseClass类,然后我们要定义extentClass,但是我们打算以baseClass的一个实例为原型,来克隆的extendClass也同时包含showMsg这个对象方法。
extendCtotype = new baseClass()就可以阅读为:extendClass是以baseClass的一个实例为原型克隆创建的。
那么就会有一个问题,如果extendClass中本身包含有一个与baseClass的方法同名的方法会怎么样?
下面是扩展实验2:
function baseClass(){ this.showMsg = function() { alert(baseClass::showMsg); }}function extendClass(){ this.showMsg =function () { alert(extendClass::showMsg); }}extendCtotype = new baseClass();instance = new extendClass();instance.showMsg();//显示extendClass::showMsg
实验证明:函数运行时会先去本体的函数中去找,如果找到则运行,找不到则去prototype中寻找函数。或者可以理解为prototype不会克隆同名函数。
那么又会有一个新的问题:
如果我想使用extendClass的一个实例instance调用baseClass的对象方法showMsg怎么办?
答案是可以使用call:
extendCtotype = new baseClass();instance = new extendClass();var baseinstance = new baseClass();baseinstance.showMsg.call(instance);//显示baseClass::showMsg
这里的baseinstance.showMsg.call(instance);阅读为“将instance当做baseinst
您可能关注的文档
最近下载
- 写作《说明书》-【中职专用】高二语文同步精品课件(高教版2023·职业模块).pptx VIP
- 2024随县中小学教师招聘考试题库及答案.docx VIP
- TIA博图软件培训(内部资料).ppt VIP
- 蒂升电梯MC2-C控制柜主板插件端子说明产品介绍.pdf VIP
- “一带一路”跨境电商 课件 第3、4章 “一带一路”沿线国家跨境电商相关法律法规与规章、“一带一路”跨境电商平台.pptx VIP
- 无机化学第四章-化学反应速率和化学平衡.pptx VIP
- 培养青年教师师徒协议7篇.docx VIP
- “一带一路”跨境电商 课件 第5、6章 “一带一路”跨境电商交易流程、“一带一路”跨境电商消费者行为.pptx VIP
- 23快乐的小河 公开课一等奖创新教案(2课时).docx VIP
- 4.3《撰写报告》(教学设计)-【中职专用】高二语文同步精品课堂(高教版2023·职业模块).docx VIP
原创力文档


文档评论(0)