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


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

目录
相关文章
|
10天前
|
JavaScript 前端开发
【JavaScript】——JS基础入门常见操作(大量举例)
JS引入方式,JS基础语法,JS增删查改,JS函数,JS对象
|
2月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
2月前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
36 1
JavaScript中的原型 保姆级文章一文搞懂
|
2月前
|
JavaScript 前端开发
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
|
2月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
40 2
|
2月前
|
前端开发 JavaScript 持续交付
提高JavaScript编程效率
提高JavaScript编程效率
31 3
|
2月前
|
自然语言处理 JavaScript 前端开发
JavaScript闭包:解锁编程潜能,释放你的创造力
【10月更文挑战第25天】本文深入探讨了JavaScript中的闭包,包括其基本概念、创建方法和实践应用。闭包允许函数访问其定义时的作用域链,常用于数据封装、函数柯里化和模块化编程。文章还提供了闭包的最佳实践,帮助读者更好地理解和使用这一强大特性。
25 2
|
2月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API
使用JavaScript和Node.js构建简单的RESTful API
|
3月前
|
Web App开发 JavaScript 前端开发
Node.js:JavaScript世界的全能工具
Node.js:JavaScript世界的全能工具
|
6天前
|
设计模式 前端开发 搜索推荐
前端必须掌握的设计模式——模板模式
模板模式(Template Pattern)是一种行为型设计模式,父类定义固定流程和步骤顺序,子类通过继承并重写特定方法实现具体步骤。适用于具有固定结构或流程的场景,如组装汽车、包装礼物等。举例来说,公司年会节目征集时,蜘蛛侠定义了歌曲的四个步骤:前奏、主歌、副歌、结尾。金刚狼和绿巨人根据此模板设计各自的表演内容。通过抽象类定义通用逻辑,子类实现个性化行为,从而减少重复代码。模板模式还支持钩子方法,允许跳过某些步骤,增加灵活性。