第6章 面向对象 导论(javascript的面向对象)

javascript的面向对象

JavaScript设计之初没有面向对象的功能设计。只有借助对象数据类型来模拟面向对象。

如何使用对象这个数据类型来达到面向对象的封装,继承和多态的效果呢?

面向对象的理解

创建对象

前面已经介绍到,创建对象就是设计绘制积木零件的图纸
在这里插入图片描述
如图,要制作这些动物:按照零件的图纸制造零件,然后组装。
要编写完成某功能的程序:就是按照类的图纸,制造(实例化)一个对象,然后在主代码中调用组装。

那么这些零件图纸的设计要说明什么,就可以类比class(类)要怎么描述。
在这里插入图片描述
主要描述有:
齿轮{
型号:QSn6.5-0.1
材质:钢
直径:12.2
齿数:24
倾斜度:10°
功能:传动
在这里插入图片描述
}

如此这般,每一种齿轮都要重新做一张图,如此设计图纸太费事。

上面这个方案对应到Javascript的面向对象定义时,对应的就是字面量创建对象

能不能找个图纸打印机,只要输入几个主要参数,就自己打印出齿轮图纸来

这个方案对应到Javascript的面向对象定义时,对应的就是工厂模式创建对象

打印出齿轮图纸虽然解决了创建多个相似齿轮的问题,但却没有解决齿轮是哪一类齿轮的问题。(工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题。) 如何解决呢?
在这里插入图片描述在这里插入图片描述
如何分类的打印出齿轮图纸?

你要提前建一个数据库分门别类的保存好每种型号零件的图纸,只要你输入(new 某某齿轮)新建某某齿轮,齿轮的图纸就调出来。

这个方案对应到Javascript的面向对象定义时,对应的就是构造函数模式创建对象

当零件图纸越来越多时候,存储记忆太难,如果能把某一类产品的图纸,相同部分只存一份,不同部分每个单独存,同时指出其他相同部分是那张图纸。

在这里插入图片描述

相同部分存的那一份,也就是齿轮模板,我们起个名字叫“原型”

这个方案对应到Javascript的面向对象定义时,对应的就是原型模式创建对象

这种原型方式,也有自己的问题,上图中下面的四个齿轮图纸,不用画,只存个颜色,齿轮样子指向原型图(上面那个黑色的齿轮图)。如果红色齿轮由于要求对齿轮的齿数做了重新修改,那就会保存到原型图中,其他颜色齿轮的图纸都会对齿数变动。

这个如何解决?

用构造函数和原型模式结合使用

这个方案对应到Javascript的面向对象定义时,对应的就是组合使用构造函数模式和原型模式创建对象

不变的部分存在模板中(原型)
可能变化的存在构造函数中

对象继承

也就是图纸的继承

在这里插入图片描述

您的浏览器不支持 HTML5 canvas 标签。
posted @ 2022-04-06 23:53  szmtjs10  阅读(29)  评论(0)    收藏  举报