当然 , 如果你有函数式编程的经验就知道类也是一种非常常用的设计模式 。 但是对于其他人来说 , 这可能是第一次知道类并不是必须的编程基础 , 而是一种可选的代码抽象 。
有些语言(比如 Java)并不会给你选择的机会 , 类并不是可选择的——万物皆是类 。 其他语言(C++)则会提供面向过程和面向类这两种语法 , 开发者可以选择其中的一种风格或混用两种风格 。
论点:面对对象只是一种可选择的抽象方式 , 并非最优解 。
JavaScript 中的「类」JavaScript 属于哪一类呢?在相当长的时间里 , JavaScript 中只有一些近似类的语法元素(比如 new 和 instanceof) , 不过在后面的 ES6 中新增加了一些元素 , 比如 class 关键字 。
介绍其他语言的 类 编程风格
这是不是意味着 JavaScript 中实际有类呢?简单来说:不是 。
由于类是一种设计模式 , 所以你可以用一些方法近似实现类的功能 。 为了满足类设计的最普遍需求 , JavaScript 提供了一些近似类的语法 。
事实:JavaScript 中并不存在真正的类 , 只是模仿类的语法的设计模式 。
虽然有近似的语法 , 但是 JavaScript 的机制似乎一直在阻止你使用类设计模式 。 在近似类的表象之下 , JavaScript 的机制起初和类完全不同 。 语法糖和广泛使用的 JavaScript 类库试图掩盖这个事实 , 但是你迟早会面对它:其他语言的类和 JavaScript 中的「类」不一样 。
只是为了满足设计模式 , 这是不是最优解并没有说明 。
总结一下 , 在软件设计中类是一种可选的模式 , 你需要自己决定是否在 JavaScript 中使用它 。 由于许多开发者都非常喜欢面向类的软件设计 , 我们会在本章升剩余部分介绍如何在 JavaScript 中实现类以及存在的一些问题 。
JavaScript 中并不存在真正的类 , 它只是仿照类 。
类的机制在许多面向类的语言中 , 「标准库」会提供 Stack 类 , 它是一种「栈」数据结构 。 Stack 类会有一些变量来储存数据 , 同时提供一些公开的可访问行为 , 从而让你的代码可以和数据进行交互 。
但是在这些语言中 , 你实际上并不直接操作 Stack 。 Stack 类仅仅是一个抽象的表示 , 它描述了所有「栈」需要做的事 , 但是它本身并不是一个「栈」 。 你必须先实例化 Stack 类然后才能对它进行操作 。
面向类的语言中 , 类的本质是一种栈数据结构 。
建造「类」和「实例」的概念来自于房屋建造 。
建筑师会规划出一个建筑的所有特性:多宽、多高、多少窗户以及窗户的位置 , 甚至连建造墙和房顶需要的材料都要计划好 。 好在这个阶段他并不需要关心建筑会建在哪里 , 也不需要关心建造多少个这样的建筑 。
建筑师也不关心建筑里的内容——家具、壁纸、吊扇等 , 他只需要关心用什么结构来容纳它们 。
建筑蓝图只是建筑计划 , 它们并不是真正的建筑 , 我们还需要一个建筑工人来建造建筑 。 建筑工人会按照蓝图建造建筑 。 实际上 , 他会把规划好的特性从蓝图中复制到现实世界建筑中 。
完成后 , 建筑就成为了蓝图的物理实例 , 本质上就是对蓝图的复制 。 之后建筑工人就可以到下一个地方 , 把所工作都重复了一遍 , 再创建一个副本 。
建筑师规划出类的特性 , 蓝图是设计本身的体现 。
建筑就是实例 , 蓝图是蓝图设计稿 。
- 尽管大刀阔斧地尝鲜了大小核混合架构|13代酷睿最大睿频比12900ks还要高200~300mhz
- 【竞彩课堂】什么是单场投注?什么是混合过关?
- 科大讯飞|10.1英寸护眼大屏!科大讯飞AI学习机A10图赏
- 苹果9英寸折叠屏曝光!加持ToDesk后堪称iPhone/iPad/Mac混合体
- 京东云混合多云操作系统云舰,解决企业出海运维难题
- 10.89万元起,风行T5 EVO热浪联名伍六七高燃上市
- javascript|微信新功能:暴露了谁最爱你
- javascript|玩家利用3D打印技术制作了《宝可梦》中的小火龙,还带它出门露营
- 游戏性能稳了!联想小新Pro 16 2022显卡曝光:RTX3050 Ti支持混合输出
- RTX|联想小新Pro 16 2022显卡曝光:RTX3050 Ti 支持混合输出