javascript设计模式(一)—-基于原型编程的js(上

简介: javascript设计模式(一)—-基于原型编程的js(上

前言

javascript与java这些语言不同,js实现面向对象不是基于面向类型的方式来设计的,也没有在语言层面上提供接口类和接口的支持,而是通过原型委托的形式来实现对象之间的继承。所以对于js设计模式而言,需要与传统面向对象语言区分开来,这篇文章作为javasccript设计模式系列的第一篇文章,将就js的原型编程模式展开这章的内容


正文

动态类型语言与鸭子类型

编程语言按照数据结构可以大体分类为两大类,一类是静态类型语言,一类是动态类型语言,静态类型对于语言类型有着强制性限制,会在编译阶段就指出类型不匹配的错误,而动态类型语言中,变量是在语言执行过程中,才会被赋予对应的类型。

js就是典型的动态类型语言,当我们对一个变量赋值的时候并不需要考虑它的类型。这种动态语言的宽容特性,给js编程带来了很大的灵活性,由于无需进行类型检测,我们可以尝试调用任何对象的任何方法,而不需要考虑它的原本设计是否包含这种方法

这个思想在设计模式中也被称为鸭子类型,“如果一个动物走路像鸭子,叫也像鸭子,那它就是鸭子”。在js的设计中,基于这个原理,可以很轻松地实现“面向接口编程,而不是面向实现编程”


多态

什么是多态

多态是设计模式中一个常见的名词,通俗的解释就是,给不同的对象发现同一组消息,这些对象会根据这个消息作出不同的反馈。


javascript中的多态

之前我们介绍到,javascript的变量类型是会在运行过程中不断变化的,而多态其实是不同的类型对于同一个消息的不同反馈,所以其实对于javascript而言,多态是与生俱来的

这就是一种多态的体现,makeSound对于不同的动物会发出不同的声音,只需要它实现了sound方法就可以,后面如果要增加新的动物,也只需要创建新的动物对象,而不需要调整makeSound方法。


多态的作用

多态是面向对象编程中最重要的技术,多态最根本的作用是通过把过程化的条件分支语句转化为对象的多态性,从而消除这些条件分支

为了说明这个问题,我们再来讲一下动物发声的问题,上面makeSound除了可以这么实现还有一个实现方式

640.png

可能这也是不少同学想到的第一种实现方式,这样的实现实际上与设计模式中的开放-封闭原则是相悖的,什么是开放-封闭原则呢,软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。makeSound方法作为一个工具或者业务方法,对它进行扩展要进行减少对它方法本身的修改,上面这种写法,如果动物你需要增加猪叫,猫叫,你需要跟着上面的部分不断地叠加新的else-if,是不便于大型项目中的维护的


小节

这一章我们主要介绍了什么是动态语言,多态是什么,以及多态在js中的实现。多态的作用就是用对象的多态性来尽量消除条件分支。在javascript这种将函数作为一等对象的语言中,函数本身也是对象,函数用来封装行为并且能够四处被传递。当我们对一些函数发送被调用的消息时候,函数会返回不一样的反馈,这就是多态性的一种表现,也是很多设计模式能够在javascript中使用高阶函数来代替实现的原因。

下半部分我们将就js的封装性,和原型编程来进一步探讨js与其他语言的不同,以及js这门语言当初的设计机制,这会帮助我们更好地理解后面一些设计模式在js中的实现


小伙伴们今天的学习就到这里了,如果觉得本文对你有帮助的话,欢迎转发,评论,收藏,点赞!!!

目录
相关文章
|
9月前
|
设计模式 缓存 安全
【高薪程序员必看】万字长文拆解Java并发编程!(8):设计模式-享元模式设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的经典对象复用设计模式-享元模式,废话不多说让我们直接开始。
201 0
|
9月前
|
设计模式 缓存 监控
并发设计模式实战系列(14):CAS(无锁编程)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第十四章,废话不多说直接开始~
146 0
|
10月前
|
JavaScript 前端开发 Java
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
320 24
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
|
9月前
|
资源调度 JavaScript 前端开发
Day.js极简轻易快速2kB的JavaScript库-替代Moment.js
dayjs是一个极简快速2kB的JavaScript库,可以为浏览器处理解析、验证、操作和显示日期和时间,它的设计目标是提供一个简单、快速且功能强大的日期处理工具,同时保持极小的体积(仅 2KB 左右)。
559 24
|
11月前
|
JavaScript Ubuntu Linux
如何在阿里云的linux上搭建Node.js编程环境?
本指南介绍如何在阿里云Linux服务器(Ubuntu/CentOS)上搭建Node.js环境,包含两种安装方式:包管理器快速安装和NVM多版本管理。同时覆盖全局npm工具配置、应用部署示例(如Express服务)、PM2持久化运行、阿里云安全组设置及外部访问验证等步骤,助你完成开发与生产环境的搭建。
|
11月前
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
11月前
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
用array.filter()来实现数据筛选、数据清洗和链式调用,相对于for循环更加清晰,语义化强,能显著提升代码的可读性和可维护性。博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
9月前
|
设计模式 Java 数据库连接
【设计模式】【创建型模式】工厂方法模式(Factory Methods)
一、入门 什么是工厂方法模式? 工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但由子类决定实例化哪个类。工厂方法模式使类的实例化延迟
284 16
|
9月前
|
设计模式 负载均衡 监控
并发设计模式实战系列(2):领导者/追随者模式
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发设计模式实战系列,第二章领导者/追随者(Leader/Followers)模式,废话不多说直接开始~
271 0