位置: 编程技术 - 正文

用JavaScript实现单继承和多继承的简单方法(javascript怎么做)

编辑:rootadmin
JavaScript就其本质是函数式编程语言,是Lisp的后代,同时又加入了一下面向对象编程的元素,放弃了一些难懂的函数式语言的元素。 函数式编程语言可以实现面向对象编程,这是毫无疑义的,Curry方法可以实现对类和对象的模拟。但是JavaScript提供了另一种实现OOP的方法:原型继承。 因此,JavaScript实现面向对象编程和一般的函数式编程语言还是有所区别的。 本文我将会给大家介绍JavaScript实现单继承和多继承的方法。 用原型实现单继承: 有很多JavaScript库提供了一些函数帮助实现单继承。但实际上,JavaScript本身就提供了原型继承的方法。因此,根本不需要提供特定的方法来实现,简单使用JavaScript代码就可以实现单继承。但是,JavaScript提供的原型继承方法很容易犯错,下面我给大家演示一下怎样简洁明了地实现原型继承。 假设MyB继承MyA类,那么,代码如下: function MyA(){ if(MyA.prototype.baseClass!==undefined){ MyA.prototype.baseClass.call(this); } ……一般代码 } function MyB(){ if(MyB.prototype.baseClass!==undefined){ MyB.prototype.baseClass.call(this); } ……一般代码 } MyB.prototype=new MyA(); MyB.prototype.baseClass=MyB.prototype.constructor;//使用baseClass引用//基类的构造器函数。 MyB.prototype.constructor=MyB;//恢复子类的构造器属性 用于未来通过这个属性判//断对象的类型。 var myA=new MyA(); var myB=new MyB(); 上述javascript代码中,我在每一个构造函数中都添加了这么一段代码: if(ClassName.prototype.baseClass!==undefined){ ClassName.prototype.baseClass.call(this); } 这段代码寻找原型中的baseClass方法,如果有,就调用它。 在后面的原型继承的实现中,我为子类创建了baseClass属性,它的值是基类的构造函数。因此,只要遵守我的方式编写代码,就可以保证基类的构造函数在子类构造实例时会得到执行。 现在,如果MyA类又继承了Base类,只需要添加3行原型继承代码即可: MyA.prototype=new Base(); MyA.prototype.baseClass= MyA.prototype.constructor;//使用baseClass引用//基类的构造器函数。 MyA.prototype.constructor= MyA;//恢复子类的构造器属性 用于未来通过这个属性判//断对象的类型。 不需要修改MyA类本身的代码,MyA类及其子类MyB类的实例就都可以得到正确的执行。 那些JavaScript库实现的继承,需要修改Object,Function等基类,容易引起冲突。还有一些方法,每一次实现继承,都必须手工修改子类的构造函数,以使构造函数能够正确调用基类的构造函数。 上面提供的方法编写JavaScript代码很好地解决了这些问题。 用Mixin(混入)实现多继承 JavaScript本身并没有提供多继承的机制,但我们可以使用Mixin(混入)这种技巧实现多继承的效果。 下面是我编写的Mixin助手方法,可以为类和对象动态添加属性。 1,copyClassPrototypeProperties复制类的原型属性 /** * 把源类原型上的所有属性复制到目标对象上,第一个参数是boolean值,表示是否覆盖目标类的原型的属性 */ function copyClassPrototypeProperties(isOverride,receivingClass,givingClass){ if(arguments.length>3){ for(var i=3;i<arguments.length;i++){ receivingClass.prototype[arguments[i]]=givingClass.prototype[arguments[i]]; } }else if(arguments.length==3){ for(var name in givingClass.prototype){ if(isOverride){ receivingClass.prototype[name]=givingClass.prototype[name]; }else{ //不覆盖 if(!receivingClass.prototype[name]){ receivingClass.prototype[name]=givingClass.prototype[name]; } } } }else{ throw "Please give 3 arguments at least!"; } } 2,copyObjectProperties复制对象的属性 /* * 把源对象的所有属性复制到目标对象上,第一个参数是boolean值,表示是否覆盖目标对象的属性 */ function copyObjectProperties(isOverride,receivingObject,givingObject){ if(arguments.length>3){ for(var i=3;i<arguments.length;i++){ receivingObject[arguments[i]]=givingObject[arguments[i]]; } }else if(arguments.length==3){ for(var name in givingObject){ if(isOverride){ receivingObject[name]=givingObject[name]; }else{ //不覆盖 if(!receivingObject[name]){ receivingObject[name]=givingObject[name]; } } } }else{ throw "Please give 3 arguments at least!"; } } 3,copyProperties复制属性到对象 /* * 把属性复制到目标对象中,属性可以有任意多个,并且可以是数组。 */ function copyProperties(target){ for (var i=1;i<arguments.length;i++){ if(arguments[i].constructor===Array){ copyArrayProperties(target,arguments[i]); }else{ for(var name in arguments[i]){ target[name] =arguments[i][name]; } } } } /* * 把数组格式的属性复制到目标对象中,用户不应该直接调用这个方法 */ function copyArrayProperties(target,arrayArg){ for(var i=0;i<arrayArg.length;i++){ if(arrayArg[i].constructor===Array){ copyArrayProperties(target,arrayArg[i]); }else{ for(var name in arrayArg[i]){ target[name] =arrayArg[i][name]; } } } } PS:目前我正打算写一个JavaScript库,用简洁的代码提供很多功能,包括UI组件。

推荐整理分享用JavaScript实现单继承和多继承的简单方法(javascript怎么做),希望有所帮助,仅作参考,欢迎阅读内容。

用JavaScript实现单继承和多继承的简单方法(javascript怎么做)

文章相关热门搜索词:javascript怎么写,javascript运用,怎么用javascript,javascript编写程序,javascript编写程序,javascript编写,javascript编写,javascript编写,内容如对您有帮助,希望把文章链接给更多的朋友!

javascript 写类方式之一 EMCA规范中没有类(class)的概念,js的new只是让他看起来更像c++,java一点。这里说的写类,只是书写js代码风格而已。1、构造函数方式/***Person类:定义一

javascript 写类方式之二 2、原型方式/***Person类:定义一个人,有个属性name,和一个getName方法*/functionPerson(){}Person.prototype.name="jack";Person.prototype.getName=function(){returnthis.name;}把类

javascript 写类方式之三 取前面两种的优点:a、用构造函数来定义类属性(字段)b、用原型方式来定义类的方法。就有了第三种方式。这种方式貌似采用的人较多。3、综合构

标签: javascript怎么做

本文链接地址:https://www.jiuchutong.com/biancheng/386466.html 转载请保留说明!

上一篇:JAVASCRIPT THIS详解 面向对象

下一篇:javascript 写类方式之一(js使用类)

  • 政府征用土地补偿标准2021年
  • 城镇土地使用税的征税范围
  • 增值税进项税销项税
  • 公司购买新车购置税是否可以抵扣呢
  • 履约保证金打到哪个账户
  • 民办学校房屋要求
  • 不动产销售额怎么填
  • 车票抵扣进项税申报在哪一栏
  • 自然人独资公司和个人独资企业区别
  • 新会计准则 预付房租怎么做账
  • 模具费进研发费用还是成本
  • 非贸税务备案
  • 注册商标怎么做账
  • 三证合一后银行开户许可证还有吗
  • 对方公司倒闭应收账款发票还需要开吗
  • 固定资产处理怎么记账
  • 公司向员工借款合法吗
  • 建筑业预征缴纳税款
  • 退货没有红字发票怎么办
  • 个人独资企业没有公司章程吗?
  • 2017企业所得税小微企业优惠政策
  • 民办非企业单位属于什么类型
  • 银行承兑汇票到期后多长时间失效
  • 其他税收收入包括
  • 其它综合收益算利润吗
  • 小微企业需要税务登记吗
  • 腾讯电脑管家流量监控不显示
  • 刚装好的服务器怎么安装
  • 你需要来自system的权限怎么解决
  • 会计谨慎性原则是指
  • 苹果手机无法加入WiFi
  • 社保会计科目怎么做账
  • 投标保证金退回是什么意思
  • PHP:spl_autoload_register()的用法_spl函数
  • php数组函数 菜鸟
  • 销售多余材料的收入会计分录
  • 产生永久性差异时为什么计税基础等于账面价值
  • htmlspecialchars_decode
  • 设备租赁费属于设备费吗
  • adan算法
  • springboot基本结构
  • 什么是电子税务局app
  • 旅行社代订的机票可以退吗
  • 有什么是即征即退税的
  • phpcms编辑器
  • pytest conftest
  • 营改增后为什么利息要提供发票吗
  • 无形资产开发阶段的支出应当全部资本化
  • 集团内部借款利率如何确定
  • 所得税怎么收取
  • 银行代付工资如何操作
  • 税务局退回来的附加税金怎么做账
  • 应收票据的核算范围包括
  • 利息支出应计入什么科目
  • 政府拆迁赔款会计上怎样做账
  • 资金账簿的计税依据
  • 一般纳税人废品行业有哪些
  • 教育费附加计入其他应付款吗
  • 缴纳工会筹备金应该记什么科目
  • 11个点增值税发票是多少
  • Windows Server 2008禁止模块安装提升网络性能
  • 电脑蓝屏bios设置教程
  • Win7 64位旗舰版中让SSD固态硬盘更快的优化方法
  • xp的兼容模式
  • dvd rom drive bbs priorities
  • kdeskcore.exe是什么
  • xp的命令提示符在哪
  • win7笔记本任务管理器
  • WIN10安装网络打印机
  • cocos2dx在暂停某些元素后导致crash问题
  • nodejs模拟点击
  • android GridView实现图库预览图,多选模式下右上角打勾
  • html5webview交互
  • 贵州省发票流向查询
  • 北京地税税务总局官网
  • 残疾人保障金税前扣除规定
  • 莱钢生产什么产品
  • 江苏灵活就业医保交多少年
  • 安徽税务局检验员工资
  • 注册地址和税务登记可以不一致吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设