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


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

目录
相关文章
|
1天前
|
JavaScript
js奥义:原型与原型链(1)
js奥义:原型与原型链(1)
|
1天前
|
人工智能 JavaScript 前端开发
JavaScript AI 编程助手
JavaScript AI 编程助手
10 0
|
1天前
|
JavaScript 前端开发
Vue.js中使用JavaScript实现路由跳转详解
Vue.js中使用JavaScript实现路由跳转详解
2 0
|
2天前
|
JavaScript 前端开发 IDE
程序员必知:WPSJSA宏编程(JS):1.初识
程序员必知:WPSJSA宏编程(JS):1.初识
|
3天前
|
JavaScript 前端开发 IDE
程序员必知:WPSJSA宏编程(JS):1.初识
程序员必知:WPSJSA宏编程(JS):1.初识
|
3天前
|
JavaScript 前端开发 索引
JavaScript ES6 新特性探索:Proxy 解锁编程新境界
JavaScript ES6 新特性探索:Proxy 解锁编程新境界
|
3天前
|
自然语言处理 前端开发 JavaScript
JavaScript 函数指南:掌握编程密钥库的精髓
JavaScript 函数指南:掌握编程密钥库的精髓
|
3天前
|
Web App开发 XML JavaScript
JavaScript 冷知识大赏:带你领略不一样的编程乐趣
JavaScript 冷知识大赏:带你领略不一样的编程乐趣
|
3天前
|
存储 Web App开发 前端开发
开启 JavaScript 数据类型宝藏库:揭示编程世界的基石奥秘
开启 JavaScript 数据类型宝藏库:揭示编程世界的基石奥秘
|
1月前
|
前端开发 JavaScript
JavaScript中的原型和原型链
JavaScript中的原型和原型链

热门文章

最新文章