已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- T/CSEA 35-2025纺织机械零件热喷涂陶瓷涂层 技术条件
- T/UNP 415-2024高性能汽车燃油喷射系统用不锈钢功能材料
- T/GSET 001-2025不同品牌、不同型号电梯群控调度方法和要求
- T/CI 864-2024市政管道清淤施工及验收技术规范
- T/CAFFCI 70-2023食品添加剂 缬草油
- T/CSAE 350-2024轮胎静态刚度特性通用试验方法
- 2025~2026学年江苏省南通市通州区苏教版五年级上册期中数学试卷【附答案】
- 2026学年湖南省常宁市六年级数学期末点睛提升能力提升卷详细参考解析详细答案和解析
- Photoshop专业技能考试试题及详细答案
- 2026年国家公务员政治理论应知应会知识试题库与答案
- 机器学习 课件全套 张旭东 第1-18讲 -概述、统计基础 -深度生成模型-3
- 2026住院医师规培-重庆-重庆住院医师规培(口腔全科)历年参考题库含答案详解
- 2026-2027学年五年级语文上册第三单元习作《故事新编》教学教学课件
- 2026建设银行校招笔试真题及答案
- GB/T 48023-2026数据中心冷板式液冷系统技术规范
- 2026年小学必读书目《安徒生童话》阅读测试试题及答案
- 食品加工厂厂长产品质量与生产效率绩效衡量表
- 旋挖成孔灌注桩施工监理实施细则
- DBJ33∕T 1020-2022 建设工程地质钻探安全技术规程 附条文说明
- 急救、生命支持类设备应急调配手册
- 孕产妇危重症紧急救治专家共识(2026年版)
评论
0/150
提交评论