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中的实现


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

目录
相关文章
|
设计模式 缓存 安全
【高薪程序员必看】万字长文拆解Java并发编程!(8):设计模式-享元模式设计指南
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的经典对象复用设计模式-享元模式,废话不多说让我们直接开始。
288 0
|
设计模式 缓存 监控
并发设计模式实战系列(14):CAS(无锁编程)
🌟 大家好,我是摘星!🌟今天为大家带来的是并发设计模式实战系列,第十四章,废话不多说直接开始~
245 0
|
JavaScript 前端开发 Java
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
497 24
JavaScript:编程宇宙的多面闪耀之星-揭秘 JavaScript,编程界的全能霸主如何炼成?-优雅草卓伊凡
|
JavaScript Ubuntu Linux
如何在阿里云的linux上搭建Node.js编程环境?
本指南介绍如何在阿里云Linux服务器(Ubuntu/CentOS)上搭建Node.js环境,包含两种安装方式:包管理器快速安装和NVM多版本管理。同时覆盖全局npm工具配置、应用部署示例(如Express服务)、PM2持久化运行、阿里云安全组设置及外部访问验证等步骤,助你完成开发与生产环境的搭建。
|
设计模式 机器学习/深度学习 前端开发
Python 高级编程与实战:深入理解设计模式与软件架构
本文深入探讨了Python中的设计模式与软件架构,涵盖单例、工厂、观察者模式及MVC、微服务架构,并通过实战项目如插件系统和Web应用帮助读者掌握这些技术。文章提供了代码示例,便于理解和实践。最后推荐了进一步学习的资源,助力提升Python编程技能。
|
JavaScript 前端开发 IDE
【编程向导】Js与Ts差异详解:选择与权衡
JavaScript 一直是 Web 开发的基石,以其灵活性和动态性著称,但其松散类型可能导致大型项目中出现难以调试的错误。TypeScript 作为 JavaScript 的超集,通过引入静态类型系统,提供了更高的类型安全性和更好的工具支持,尤其适合大型团队和复杂项目。本文详细对比了 JavaScript 和 TypeScript 的优缺点,并提供了实际代码示例,帮助开发者根据项目需求选择合适的工具。
2172 2
|
设计模式 JavaScript 算法
浅谈几种js设计模式
设计模式是软件开发中的宝贵工具,能够提高代码的可维护性和扩展性。通过单例模式、工厂模式、观察者模式和策略模式,我们可以解决不同场景下的实际问题,编写更加优雅和高效的代码。
445 8
|
设计模式 开发者 Python
Python编程中的设计模式应用与实践感悟####
本文作为一篇技术性文章,旨在深入探讨Python编程中设计模式的应用价值与实践心得。在快速迭代的软件开发领域,设计模式如同导航灯塔,指引开发者构建高效、可维护的软件架构。本文将通过具体案例,展现设计模式如何在实际项目中解决复杂问题,提升代码质量,并分享个人在实践过程中的体会与感悟。 ####
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
339 2
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
384 1
JavaScript中的原型 保姆级文章一文搞懂