js中prototype介绍.doc

  1. 1、本文档共24页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
js中prototype介绍

JS中的prototype 2011-06-03 14:40 by 轩脉刃,?129722?阅读,?67?评论,?收藏,?编辑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(); var 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(); var instance?=?new?extendClass(); instance.showMsg();//显示extendClass::showMsg ? 实验证明:函数运行时会先去本体的函数中去找,如果找到则运行,找不到则去prototype中寻找函数。或者可以理解为prototype不会克隆同名函数。 ? 那么又会有一个新的问题: 如果我想使用extendClass的一个实例instance调用baseClass的对象方法showMsg怎么办? ? 答案是可以使用call: extendCtotype?=?new?baseClass(); var instance?=?new?extendClass(); var?baseinstance?=?new?baseClass(); baseinstance.showMs

文档评论(0)

raff95 + 关注
内容提供者

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

1亿VIP精品文档

相关文档