JavaScript中prototype解释.doc

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

JavaScript prototype 的深度探索 JavaScript 中对象的prototype 属性,可以返回对象类型原型的引用。这是一个相当 拗口的解释,要理解它,先要正确理解对象类型(Type)以及原型(prototype)的概念。 1、什么是prototype JavaScript 中对象的prototype 属性,可以返回对象类型原型的引用。这是一个相当 拗口的解释,要理解它,先要正确理解对象类型(Type)以及原型(prototype)的概念。 前面我们说,对象的类(Class)和对象实例(Instance)之间是一种“创建”关系, 因此我们把“类”看作是对象特征的模型化,而对象看作是类特征的具体化,或者说,类 (Class)是对象的一个类型(Type)。例如,在前面的例子中,p1 和p2 的类型都是Point, 在JavaScript 中,通过instanceof 运算符可以验证这一点: p1 instanceof Point p2 instanceof Point 但是,Point 不是p1 和p2 的唯一类型,因为p1 和p2 都是对象,所以Obejct 也是它 们的类型,因为Object 是比Point 更加泛化的类,所以我们说,Obejct 和Point 之间有一 种衍生关系,在后面我们会知道,这种关系被叫做“继承”,它也是对象之间泛化关系的一 个特例,是面向对象中不可缺少的一种基本关系。 在面向对象领域里,实例与类型不是唯一的一对可描述的抽象关系,在JavaScript 中, 另外一种重要的抽象关系是类型(Type)与原型(prototype)。这种关系是一种更高层次的抽 象关系,它恰好和类型与实例的抽象关系构成了一个三层的链。 在现实生活中,我们常常说,某个东西是以另一个东西为原型创作的。这两个东西可以 是同一个类型,也可以是不同类型。习语“依葫芦画瓢”,这里的葫芦就是原型,而瓢就是 类型, 用JavaScript 的prototype 来表示就是“ 瓢.prototype = 某个葫芦” 或者 “瓢.prototype= new 葫芦()”。 要深入理解原型,可以研究关于它的一种设计模式——prototype pattern,这种模式 的核心是用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。 JavaScript 的prototype 就类似于这种方式。 关于prototype pattern 的详细内容可以参考《设计模式》(《Design Patterns》)它不 是本文讨论的范围。 注意,同类型与实例的关系不同的是,原型与类型的关系要求一个类型在一个时刻只能 有一个原型(而一个实例在一个时刻显然可以有多个类型)。对于JavaScript 来说,这个限制有两层含义,第一是每个具体的JavaScript 类型有且仅有一个原型(prototype),在默认的情况下,这个原型是一个Object 对象(注意不是Object 类型!)。第二是,这个对象所属的类型,必须是满足原型关系的类型链。例如p1 所属的类型是Point 和Object,而一个Object 对象是Point 的原型。假如有一个对象,它所属的类型分别为ClassA、ClassB、ClassC和Object,那么必须满足这四个类构成某种完整的原型链。 有意思的是,JavaScript 并没有规定一个类型的原型的类型(这又是一段非常拗口的 话),因此它可以是任何类型,通常是某种对象,这样,对象-类型-原形(对象)就可能构 成一个环状结构,或者其它有意思的拓扑结构,这些结构为JavaScript 带来了五花八门的 用法,其中的一些用法不但巧妙而且充满美感。下面的一节主要介绍prototype 的用法。 2、prototype 使用技巧 在了解prototype 的使用技巧之前,首要先弄明白prototype 的特性。首先,JavaScript 为每一个类型(Type)都提供了一个prototype 属性,将这个属性指向一个对象,这个对象就 成为了这个类型的“原型”,这意味着由这个类型所创建的所有对象都具有这个原型的特性。 另外,JavaScript 的对象是动态的,原型也不例外,给prototype 增加或者减少属性,将 改变这个类型的原型,这种改变将直接作用到由这个原型创建的所有对象上,例如: script function Point(x,y) { this.x = x; this.y = y; } var p1 = new Point(1,2); var p2 = new Point(3,4); Point.prototype.z = 0; //动态为Point 的原型添加了属性 alert(p1.z); alert

文档评论(0)

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

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档