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


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

目录
相关文章
|
7天前
|
JavaScript 前端开发
JavaWeb JavaScript ③ JS的流程控制和函数
通过本文的详细介绍,您可以深入理解JavaScript的流程控制和函数的使用,进而编写出高效、可维护的代码。
58 32
|
1月前
|
设计模式 数据安全/隐私保护
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
81 33
|
2月前
|
JavaScript 前端开发
【JavaScript】——JS基础入门常见操作(大量举例)
JS引入方式,JS基础语法,JS增删查改,JS函数,JS对象
|
3月前
|
JavaScript 前端开发 Java
springboot解决js前端跨域问题,javascript跨域问题解决
本文介绍了如何在Spring Boot项目中编写Filter过滤器以处理跨域问题,并通过一个示例展示了使用JavaScript进行跨域请求的方法。首先,在Spring Boot应用中添加一个实现了`Filter`接口的类,设置响应头允许所有来源的跨域请求。接着,通过一个简单的HTML页面和jQuery发送AJAX请求到指定URL,验证跨域请求是否成功。文中还提供了请求成功的响应数据样例及请求效果截图。
springboot解决js前端跨域问题,javascript跨域问题解决
|
3月前
|
JavaScript 前端开发
JavaScript中的原型 保姆级文章一文搞懂
本文详细解析了JavaScript中的原型概念,从构造函数、原型对象、`__proto__`属性、`constructor`属性到原型链,层层递进地解释了JavaScript如何通过原型实现继承机制。适合初学者深入理解JS面向对象编程的核心原理。
47 1
JavaScript中的原型 保姆级文章一文搞懂
|
3月前
|
JavaScript 前端开发
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
|
3月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
53 2
|
3月前
|
前端开发 JavaScript 持续交付
提高JavaScript编程效率
提高JavaScript编程效率
39 3
|
3月前
|
设计模式 开发者 Python
Python编程中的设计模式应用与实践感悟####
本文作为一篇技术性文章,旨在深入探讨Python编程中设计模式的应用价值与实践心得。在快速迭代的软件开发领域,设计模式如同导航灯塔,指引开发者构建高效、可维护的软件架构。本文将通过具体案例,展现设计模式如何在实际项目中解决复杂问题,提升代码质量,并分享个人在实践过程中的体会与感悟。 ####
|
3月前
|
JSON JavaScript 前端开发
使用JavaScript和Node.js构建简单的RESTful API
使用JavaScript和Node.js构建简单的RESTful API

热门文章

最新文章