javascript设计模式(二)----基于原型编程的js(下

简介: javascript设计模式(二)----基于原型编程的js(下

前言

上一章节我们讲到,js的动态语言特性以及与生俱来的多态特性,多态特性的作用就是利用对象的多态性,尽可能消除函数设计过程中的条件分支语句。这一章我们将继续上一章的内容,进一步展开js开发中的封装以及js的原型编程设计原理

正文

封装

封装的目的是将数据隐藏,这一章我们将就四个方面来阐述数据隐藏的过程,封装数据,封装实现,封装类型和封装变化


封装数据

在很多传统语言中,比如java,数据的封装是依靠private, public, protected等这些关键词来提供一个访问权限。但是javascript当中并没有类的概念,也没有提供这些关键词(这里不包含es6),所以我们只能利用作用域去实现封装数据,而且只能模拟出private和public两种关键词(这里皆是使用es5的语言,同学们也可以直接使用es6中的let来产生局部作用域)

封装实现

从封装实现细节来说,封装使得对象本身透明不可见,对象为自己的行为负责,其他用户不关心对象本身是怎么实现的,这样使得程序设计耦合性更为松散,对象只通过暴露API接口来通信,这样当我们修改一个对象的时候,只要它的对外接口本身没变,对这个对象的修改便不会影响到外部的程序执行

封装实现在js中是很常见的,比如Array原型中实现的push和pop等方法,就是一种封装实现的过程,用户并不需要在意push中间是怎么实现的只需要直接调用即可


封装类型

封装类型这个概念是针对静态类型语言的,对于javascript 本身而言,是一门动态弱类型语言,对变量的类型限制是很模糊的,没有办法,也没有必要在这一点上实现更多,在后面设计模式的下同学们可以慢慢了解


封装变化

封装变化应该设计思想中的最重要的部分,在编写可复用的面向对象程序中,我们应该找到一个程序逻辑中易变化的部分,封装完这个部分剩下的就是稳定可复用的部分,在后面的迭代中,我们也只需要修改之前封装的变化就可以了


基于原型编程的js

在以类为中心的面向对象编程中,类和对象的关系就像模具和模型,对象总是从类当中创建出来,而基于原型的编程思想中,没有类的概念,对象的产生都是通过克隆的方式,由一个对象克隆出一个新的对象,javaScript就是基于这种思想下的编程语言


原型模式

原型模式是我们将要学习的第一个设计模式,原型模式创建对象的方式与类编程不同,是找到一个对象,用它来克隆出新的对象。原型模式的关键是语言本身是否提供了克隆的方法,ES5中提供了Object.create方法可以用于克隆对象

640.png


原型模式的模糊类型性

因为对象本身的创建并不需要基于类,而是从一个别的对象克隆出来就可以,通过这个创建方式,用户就不用在关注类型本身,就像你小时候想要吃苹果,但是你不知道它叫什么,你只需要指着苹果说我要吃这个,别人就会理解你的意思

原型编程泛型

基于原型编程思想设计的javaScript遵守的规则,我们可以称它为原型编程泛型,它遵循以下规则:

  • 所有的数据都是对象
  • 要得到一个对象,不是通过一个实例化类,而是找到一个对象作为原型并克隆它
  • 对象会记住它的原型
  • 如果对象本身无法响应某个请求,它会把这个请求委托给它的原型

关于这部分,进一步了解可以去查看作者之前写的一系列文章《js的对象的创建模式和继承模式》

小节

本节讲述了javascript的封装以及原型编程泛型,javascript不同于传统面向对象语言,并不存在类的概念,对象的创建都基于原型的克隆,同学们在后面的学习中再进一步体会这种思想

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

目录
相关文章
|
11天前
|
JavaScript 前端开发
JavaWeb JavaScript ③ JS的流程控制和函数
通过本文的详细介绍,您可以深入理解JavaScript的流程控制和函数的使用,进而编写出高效、可维护的代码。
62 32
|
1月前
|
设计模式 数据安全/隐私保护
Next.js 实战 (七):浅谈 Layout 布局的嵌套设计模式
这篇文章介绍了在Next.js框架下,如何处理中后台管理系统中特殊页面(如登录页)不包裹根布局(RootLayout)的问题。作者指出Next.js的设计理念是通过布局的嵌套来创建复杂的页面结构,这虽然保持了代码的整洁和可维护性,但对于特殊页面来说,却造成了不必要的布局包裹。文章提出了一个解决方案,即通过判断页面的skipGlobalLayout属性来决定是否包含RootLayout,从而实现特殊页面不包裹根布局的目标。
84 33
|
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面向对象编程的核心原理。
48 1
JavaScript中的原型 保姆级文章一文搞懂
|
3月前
|
JavaScript 前端开发
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
Moment.js与其他处理时间戳格式差异的JavaScript库相比有什么优势?
|
3月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
55 2
|
3月前
|
前端开发 JavaScript 持续交付
提高JavaScript编程效率
提高JavaScript编程效率
39 3
|
3月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
54 4
|
3月前
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
3月前
|
设计模式 监控 算法
Python编程中的设计模式应用与实践感悟###
在Python这片广阔的编程疆域中,设计模式如同导航的灯塔,指引着开发者穿越复杂性的迷雾,构建出既高效又易于维护的代码结构。本文基于个人实践经验,深入探讨了几种核心设计模式在Python项目中的应用策略与实现细节,旨在为读者揭示这些模式背后的思想如何转化为提升软件质量的实际力量。通过具体案例分析,展现了设计模式在解决实际问题中的独特魅力,鼓励开发者在日常编码中积极采纳并灵活运用这些宝贵的经验总结。 ###

热门文章

最新文章