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不同于传统面向对象语言,并不存在类的概念,对象的创建都基于原型的克隆,同学们在后面的学习中再进一步体会这种思想

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

目录
相关文章
|
2天前
|
JSON JavaScript 前端开发
js原型继承|26
js原型继承|26
|
1天前
|
JavaScript 前端开发
用JavaScript编程定义二维数组并初始化,然后输出元素值
用JavaScript编程定义二维数组并初始化,然后输出元素值
|
25天前
|
JavaScript 前端开发
JavaScript基础知识-原型(prototype)
关于JavaScript基础知识中原型(prototype)概念的介绍。
27 1
|
28天前
|
JavaScript 前端开发 Oracle
|
28天前
|
Java 数据库连接 数据库
从零到精通:揭秘 Hibernate 构建持久层服务的全过程,你离数据持久化大师还有多远?
【8月更文挑战第31天】本文详细介绍了如何从零开始使用 Hibernate 构建一个持久层服务。首先,通过在 Maven 项目中添加必要的依赖,确保项目具备使用 Hibernate 的条件。接着,配置 `hibernate.cfg.xml` 文件以连接 MySQL 数据库,并设置了基本属性。然后定义了一个简单的 `User` 实体类及其映射关系。此外,还创建了一个 `HibernateUtil` 工具类来管理 `SessionFactory`。
28 0
|
29天前
|
缓存 JavaScript 前端开发
Vue.js与JavaScript性能优化终极揭秘:掌握这些技巧,让你的Web应用飞一般地流畅!
【8月更文挑战第30天】随着前端应用复杂度的增加,性能优化变得至关重要。本文深入探讨了如何利用Vue.js和JavaScript实现高效的应用性能。主要内容包括:优化组件设计以减少不必要的渲染,采用异步组件与懒加载技术加速应用启动,利用虚拟滚动和分页处理大数据集,改进Vuex使用方式以及合理运用浏览器缓存等策略。通过具体示例和最佳实践,帮助开发者充分挖掘Vue.js潜力,打造高性能的前端应用。
43 0
|
29天前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
21 0
|
14天前
|
设计模式 算法 安全
设计模式——模板模式
模板方法模式、钩子方法、Spring源码AbstractApplicationContext类用到的模板方法
设计模式——模板模式
|
7天前
|
设计模式 数据库连接 PHP
PHP中的设计模式:如何提高代码的可维护性与扩展性在软件开发领域,PHP 是一种广泛使用的服务器端脚本语言。随着项目规模的扩大和复杂性的增加,保持代码的可维护性和可扩展性变得越来越重要。本文将探讨 PHP 中的设计模式,并通过实例展示如何应用这些模式来提高代码质量。
设计模式是经过验证的解决软件设计问题的方法。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理地使用设计模式可以显著提高代码的可维护性、复用性和扩展性。本文将介绍几种常见的设计模式,包括单例模式、工厂模式和观察者模式,并通过具体的例子展示如何在PHP项目中应用这些模式。
|
4天前
|
设计模式 Java Spring
spring源码设计模式分析-代理设计模式(二)
spring源码设计模式分析-代理设计模式(二)