已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在Javascript中,一切皆是对象,所谓的类也只是用来模拟其它面向对象语言的class的对象而已,例如:function MyClass() /定义一个类MyClass.call();/其实这个类本身也是一个对象 在上面的代码中,并没有为MyClass定义call方法,但是却可以调用call方法,其原因就是JavaScript的原生对象在发挥作用。通过 function关键字定义一个类,实质上就是实例化一个Function的实例,因为Javascript在Function的原生对象中定义了 call方法,所以即使MyClass的定义是空的,但是还是可以调用call方法!由此,我们就可以看到继承的影子! 在原生对象中定义的方法call被继承到了MyClass中,那么只要修改一下原生对象,那么就可以模拟出面向对象的继承机制了。 function MyBaseClass() this.Add = function(a, b) return a + b; function MyClass() MyCtotype = new MyBaseClass(); var obj = new MyClass(); var X = obj.Add(3, 4);只要把MyClass的原生对象指向基类MyBaseClass的实例对象,那么MyClass就可以继承MyBaseClass中的方法,从而实现了继承机制! 多继承 任何对象的直接原生对象都只有一个,那么如果想实现多继承该怎么办呢?可以采用两种办法: 方法一:链状继承 function MyBaseClassA() this.Add = function(a, b) return a + b; function MyBaseClassB() this.Sub = function(a, b) return a - b; function MyClass() MyBaseClassB.prototype = new MyBaseClassA(); MyCtotype = new MyBaseClassB(); var obj = new MyClass(); var X = obj.Add(3, 4); var Y = obj.Sub(9, 4);方法二:拷贝继承 function MyBaseClassA() this.Add = function(a, b) return a + b; function MyBaseClassB() this.Sub = function(a, b) return a - b; function MyClass() var A = new MyBaseClassA(); for (var method in A) MyCtotypemethod = Amethod; var B = new MyBaseClassB(); for (var method in B) MyCtotypemethod = Bmethod; var obj = new MyClass(); var X = obj.Add(3, 4); var Y = obj.Sub(9, 4);继承的本质就是属性拷贝,所以只要手动拷贝基类的所有属性,那么就可以实现多继承了,对于拷贝属性的代码可以封装一下,便于调用: var Extend = function(DeriveClass,BaseClass) var o = new BaseClass(); for (var method in o) DeriveCtotypemethod = omethod; Extend(MyClass, MyBaseClassA); Extend(MyClass, MyBaseClassB);构造参数:继承是实现了,但是如果有构造参数有又该怎么处理呢?答案就是在派生类中调用基类构造就可以了: function MyBaseClass(a, b) this.A = a; this.B = b; this.Add = function() return this.A + this.B; function MyClass(a,b,c) MyBaseClass.call(this, a, b);/调用基类的构造 var Extend = function(DeriveClass, BaseClass) var o = new BaseClass(); for (var method in o) DeriveCtotypemethod = omethod; Extend(MyClass, MyBaseClass); var obj = new MyClass(4,5,8); var X = obj.Add(); alert(X);/结果:9 call和apply方法是经常用到的两个方法,其作用就是在另一个域内调用方法! 继承机制带来的另一个问题就是同名方法隐藏问题!Javascript对象都是由原型对象生成,原型对象也有其自己的原型对象,这样就构成了一条原型对象 链,对象链的顶端指向Object原生对象,末端就是对象本身,如果对象链中存在同名的方法,那么对象链末端的方法访问优先级高于顶端的优先级,因此派生 类的方法总是隐藏基类的方法:var BaseClass=function()this.Hello=function()return A;this.say=function()return Saying A;var BaseObj = new BaseClass();var X = BaseObj.Hello();alert(X);/结果:ABaseCtotype.Hello=function(a,b)return B;var Y = BaseObj.Hello();alert(Y);/结果:Avar MyClass = function()this.Hello=function()return C;var Extend = function(DeriveClass, BaseClass) var o = new BaseClass(); for (var method in o) DeriveCtotypemethod = omethod; Extend(MyClass, BaseClass);var MyObj = new MyClass();var Z = MyObj.Hello();alert(Z);/结果:CMyCtotype.Hello=function()return D;MyCtoty
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 严重精神障碍患者管理指南
- 《GB-T 26599.1-2011激光和激光相关设备 激光光束宽度、发散角和光束传输比的试验方法 第1部分:无像散和简单像散光束》专题研究报告
- 《GBT 29493.7-2013纺织染整助剂中有害物质的测定 第7部分:聚氨酯涂层整 理剂中二异氰酸酯单体的测定》专题研究报告
- 《GB-T 38909-2020民用轻小型无人机系统电磁兼容性要求与试验方法》专题研究报告
- 《GBT 29534-2013温锻冷锻联合成形锻件 通 用技术条件》专题研究报告
- 《GBT 35618-2017 社会保险基金预算编制基本业务规范》专题研究报告
- 《GB-T 39588-2020静电屏蔽包装袋要求及检测方法》专题研究报告
- 《GB-T 13465.2-2014不透性石墨材料试验方法 第2部分:抗弯强度》专题研究报告
- 2026年陕西省西安市单招职业适应性考试题库及完整答案详解1套
- 云计算迁移咨询协议
- 1+X测绘地理信息智能应用练习题(含参考答案)
- 译林版五年级英语上册全册课件
- 磷石膏基公路基层材料 技术规范 编制说明
- 电大专科《管理英语1》历年期末考试试题及答案汇编
- 老年人护理需求评估表
- 《非政府组织管理》教学大纲
- QGW1799.1电力安全工作规程变电部分无附录
- GB/T 19809-2005塑料管材和管件聚乙烯(PE)管材/管材或管材/管件热熔对接组件的制备
- 无机及分析化学考试题(附答案)
- 体质中医基础理论课件
- 沪教版2022年五年级语文上册期末整理复习全能练习单
评论
0/150
提交评论