`
hbc8848
  • 浏览: 17073 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Javascript 的函数式对象(四)多亲继承( Multiple Inheritance )

阅读更多

 

所谓的“多亲继承”,同样是借用面向对象语言的说法。

 

以前看过一些文章,介绍如何让js拥有面向对象语言的“继承”特性。

 

但在实际项目中,很少使用这些晦涩的方法来模拟“继承”的实现。

 

既然js提倡的是函数式编程,那就让我们忘掉“继承”,“接口”这些OO特性,

 

体验函数式编程的代码重构方法,达到“提取共性,封装变化”的目的。

 

//借用策略模式的思路,创建功能类Printable,所有继承它的子类都将具有print的功能
var Printable = function(){};
Printable.prototype = {
   print: function(){
      console.log('The instance of '+this.name+' is printable!');
   },
	
   toString: function(){
      return 'Printable';
   }
};

//创建功能类Clonable,所有继承它的子类都将具有clone的功能
var Clonable = function(){};
Clonable.prototype = {
   clone: function(){
     console.log('The instance of '+this.name+' is clonable!');
   },
	
   toString: function(){
       return 'Clonable';
   }
};

// 为顶层对象Object添加extend方法,所有对象都能直接调用到这个方法。
Object.prototype.extend = function(parentClass){

    var parentClassName = parentClass.prototype.toString();
    // 遍历父类的prototype内的所有方法,在子类的prototype中存放一个指向该方法的引用	
    for(methodName in parentClass.prototype){ 
       //如果子类的prototype中存在同名方法,则该方法的引用不会被复制
       if(!this.prototype[methodName]){
         console.log('Copy the method '+methodName+' from class '+parentClassName);
         this.prototype[methodName] = parentClass.prototype[methodName];
       }
    }
}

// 定义一个多亲继承子类,里面的name变量可接受外部访问
var MultiInheritance = function(name){
    this.name = name;	
}; 
MultiInheritance.extend(Printable); // 将功能类Printable中的方法的引用复制到子类
MultiInheritance.extend(Clonable); // 将功能类Clonable中的方法的引用复制到子类

// 创建一个名为“Multi-Inheritance 1”的多亲继承子类
var multiInheritance1 = new MultiInheritance('Multi-Inheritance 1');
multiInheritance1.print(); 
multiInheritance1.clone();

// 创建一个名为“Multi-Inheritance 2”的多亲继承子类
var multiInheritance2 = new MultiInheritance('Multi-Inheritance 2');
multiInheritance2.print();
multiInheritance2.clone();

 

执行上述代码,浏览器控制台将输出如下信息:

 

Copy the method print from class Printable

Copy the method clone from class Clonable

The instance Multi-Inheritance 1 is printable!

The instance Multi-Inheritance 1 is clonable!

 

有2点需要注意:

 

1.在功能类Printable和Clonable的方法中,子类的公共变量能够被this关键字访问到。

 

2.在顶层对象Object的extend方法中,如果子类中存在和父类同名的方法,

 

根据“同名方法,子类优先”的原则,子类的方法不会被覆盖,而父类的方法也仍可被访问。

 

 

 

1
0
分享到:
评论

相关推荐

    Mysql 教程(Markd格式 经典全面 看这一个资料就够了)

    Mysql 教程(Markd格式 经典全面 看这一个资料就够了)涵盖了mysql工作流、事务、锁、索引、性能优化、运维和配置等各个方面。

    pyzmq-25.1.0-cp36-cp36m-musllinux_1_1_i686.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    my-tv-v2.1.2.apk

    电视剧里面了

    debugpy-1.6.2-cp39-cp39-macosx_10_15_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    泛微OAE10,E-Builder零代码应用构建平台操作手册

    泛微OAE10,E-Builder零代码应用构建平台操作手册

    布尔诺理工大学的VHDL课程

    布尔诺理工大学(Brno University of Technology, BUT)提供的 VHDL(硬件描述语言)课程是计算机工程和电子工程学科的重要组成部分,专注于数字系统设计和实现。该课程旨在为学生提供 VHDL 的基础知识和实用技能,使他们能够设计、模拟和实现复杂的数字电路。 ### **课程概述** **课程目标** - **掌握 VHDL 基础**:理解 VHDL 的语法、结构和基本概念,包括信号、变量、过程、函数和实体。 - **学习数字设计技术**:使用 VHDL 描述、设计和验证组合逻辑、时序电路和复杂的数字系统。 - **掌握建模和仿真**:学习如何通过 VHDL 对数字系统进行建模,并使用仿真工具进行验证。 - **硬件实现能力**:通过编译 VHDL 代码,在 FPGA 等硬件平台上进行综合与实现。 **课程内容** - **VHDL 语言基础**:介绍 VHDL 的基本语法,包括数据类型、运算符和控制结构。 - **结构化设计**:讲解如何使用 VHDL 进行层次化设计,模块化设计,以及组件实例化。 - **组合逻辑电路**:学习如何用 VHDL 描述

    docker SWARM 部署教程

    docker SWARM 部署教程

    pyzmq-25.0.2-cp39-cp39-musllinux_1_1_x86_64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    同城拼车(完整带PHP后台)

    同城拼车(完整带PHP后台)

    cryptography-2.6.1-cp34-abi3-macosx_10_6_intel.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于PHP+MySQL+Ajax实现的在线二手书交易平台+源代码+详细文档

    php 基于PHP+MySQL+Ajax实现的在线二手书交易平台+源代码+详细文档

    redis升级和部署6.2.6最新稳定版文档和程序

    redis升级和部署6.2.6最新稳定版文档和程序.zipredis升级和部署6.2.6最新稳定版文档和程序.zipredis升级和部署6.2.6最新稳定版文档和程序.zipredis升级和部署6.2.6最新稳定版文档和程序.zipredis升级和部署6.2.6最新稳定版文档和程序.zipredis升级和部署6.2.6最新稳定版文档和程序.zipredis升级和部署6.2.6最新稳定版文档和程序.zipredis升级和部署6.2.6最新稳定版文档和程序.zipredis升级和部署6.2.6最新稳定版文档和程序.zipredis升级和部署6.2.6最新稳定版文档和程序.zip

    03钢筋锥螺纹连接工程.doc

    03钢筋锥螺纹连接工程

    154653668719337b站.apk

    154653668719337b站.apk

    ipython-0.7.3-py2.5.egg

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    基于ssm框架网上花店系统毕业论文

    摘 要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此鲜花销售信息的管理计算机化,系统化是必要的。设计开发网上花店不仅会节约人力和管理成本,还会安全保存庞大的数据量,对于鲜花销售信息的维护和检索也不需要花费很多时间,非常的便利。 网上花店是在MySQL中建立数据表保存信息,运用SSM+Vue框架和Java语言编写。并按照软件设计开发流程进行设计实现。系统具备友好性且功能完善。管理员登录进入本人后台之后,主要完成花材选择管理,用户管理,鲜花管理,鲜花出入库管理,鲜花订单管理等。用户联系客服咨询问题,查看鲜花,可以收藏,购买,评论鲜花,支付订单,管理个人订单等。 网上花店在让鲜花销售信息规范化的同时,也能及时通过数据输入的有效性规则检测出错误数据,让数据的录入达到准确性的目的,进而提升网上花店提供的数据的可靠性,让系统数据的错误率降至最低。 关键词:网上花店;MySQL;SSM+Vue框架

    grpcio-1.22.0-cp36-cp36m-win_amd64.whl

    Python库是一组预先编写的代码模块,旨在帮助开发者实现特定的编程任务,无需从零开始编写代码。这些库可以包括各种功能,如数学运算、文件操作、数据分析和网络编程等。Python社区提供了大量的第三方库,如NumPy、Pandas和Requests,极大地丰富了Python的应用领域,从数据科学到Web开发。Python库的丰富性是Python成为最受欢迎的编程语言之一的关键原因之一。这些库不仅为初学者提供了快速入门的途径,而且为经验丰富的开发者提供了强大的工具,以高效率、高质量地完成复杂任务。例如,Matplotlib和Seaborn库在数据可视化领域内非常受欢迎,它们提供了广泛的工具和技术,可以创建高度定制化的图表和图形,帮助数据科学家和分析师在数据探索和结果展示中更有效地传达信息。

    20230626-汽车行业大国重车之琰究智能汽车系列报告七-智能驾驶,三重拐点临近,L3落地加速-华西证券-49页.pdf

    20230626-汽车行业大国重车之琰究智能汽车系列报告七-智能驾驶,三重拐点临近,L3落地加速-华西证券-49页.pdf

    若依(ruoyi)社区系统源代码共享共学

    一个前后端完整系统,包括基本的模块管理、数据管理等,代码完整,可读性高,适合初学者练手,也可以基于这个框架自己添减改动,完成其他功能。本框架是从若依官网上下载得来,为便捷用,各种问题请留言,看到一定回复。

    python - DataFrame查询数据操作 LJdata.csv

    数据集 LJdata.csv

Global site tag (gtag.js) - Google Analytics