javascript的面向对象
JavaScript设计之初没有面向对象的功能设计。只有借助对象数据类型来模拟面向对象。
如何使用对象这个数据类型来达到面向对象的封装,继承和多态的效果呢?
面向对象的理解
创建对象
前面已经介绍到,创建对象就是设计绘制积木零件的图纸
如图,要制作这些动物:按照零件的图纸制造零件,然后组装。
要编写完成某功能的程序:就是按照类的图纸,制造(实例化)一个对象,然后在主代码中调用组装。
那么这些零件图纸的设计要说明什么,就可以类比class(类)要怎么描述。
主要描述有:
齿轮{
型号:QSn6.5-0.1
材质:钢
直径:12.2
齿数:24
倾斜度:10°
功能:传动
}
如此这般,每一种齿轮都要重新做一张图,如此设计图纸太费事。
上面这个方案对应到Javascript的面向对象定义时,对应的就是字面量创建对象
能不能找个图纸打印机,只要输入几个主要参数,就自己打印出齿轮图纸来
这个方案对应到Javascript的面向对象定义时,对应的就是工厂模式创建对象
打印出齿轮图纸虽然解决了创建多个相似齿轮的问题,但却没有解决齿轮是哪一类齿轮的问题。(工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题。) 如何解决呢?
如何分类的打印出齿轮图纸?
你要提前建一个数据库分门别类的保存好每种型号零件的图纸,只要你输入(new 某某齿轮)新建某某齿轮,齿轮的图纸就调出来。
这个方案对应到Javascript的面向对象定义时,对应的就是构造函数模式创建对象
当零件图纸越来越多时候,存储记忆太难,如果能把某一类产品的图纸,相同部分只存一份,不同部分每个单独存,同时指出其他相同部分是那张图纸。
相同部分存的那一份,也就是齿轮模板,我们起个名字叫“原型”。
这个方案对应到Javascript的面向对象定义时,对应的就是原型模式创建对象
这种原型方式,也有自己的问题,上图中下面的四个齿轮图纸,不用画,只存个颜色,齿轮样子指向原型图(上面那个黑色的齿轮图)。如果红色齿轮由于要求对齿轮的齿数做了重新修改,那就会保存到原型图中,其他颜色齿轮的图纸都会对齿数变动。
这个如何解决?
用构造函数和原型模式结合使用
这个方案对应到Javascript的面向对象定义时,对应的就是组合使用构造函数模式和原型模式创建对象
不变的部分存在模板中(原型)
可能变化的存在构造函数中
对象继承
也就是图纸的继承
您的浏览器不支持 HTML5 canvas 标签。