作者:网信科技智慧政务产品部——赵秋
在javascript中,并没有对类的创建提供单独的方式,所以我们只能使用function函数来进行创建。
首先了解第一种方式:工厂模式
通过function定制一个创建对象的模板,在运行结束后返回一个定制好的对象,具有一定的属性和行为。

但是在这里面我们有一个问题,那就是无法告知别人当前对象是哪一种类。
构造模式
构造模式通过使用函数+new关键字分别创建类和实例

在这里我们注意点,一般使用构造模式进行创建时,函数名称首字母一般大写(行业规范),那么在使用new关键字时,这里面发生了几个变化
1.new+函数后会创建返回一个当前函数类型的对象。
2.函数内部的this指向更改为指向当前的new函数,也就是新创建的对象本身。
3.生成constructor用于声明指向当前对象的构造函数。
4.新创建的对象生成一个__proto__的属性 指向构造函数的prototype。
原型构造模式
如果将属性和行为都放在函数内部中进行创建,不利于位于,尤其是在业务比较复杂的情况下,所以又提供了原型模式。

为什么不在prototype上放置属性呢?

动态原型模式
有些时候我们想要一个类继承另一个类的属性,那么这种时候我们就可以使用动态原型模式。

在上述代码中通过创建Person类,boy类,Girl类。
在Boy和girl中 ,通过使用person替换this创建私有属性和方法(但是不会继承原型对象,原型对象只有在new关键字才会继承)。
组合模式
通过将原型模式和构造模式一起使用

1、封装:将代码封装到函数中,不允许外部访问内部成员的属性和方法,对外提供唯一的访问接口。
2、继承:通过对象继承另一个对象的属性和方法,并进行扩展开发和维护。继承拥有单根性和传递性。
3、多态:一个接口方式,根据参数的不同实现不同的状态(前端没有多态,只有伪多态)。
1.用户只需要关注实现即可,不需要关注内部原理。
2.降低了程序之间的依赖性,低耦合。
3.隐藏内部细节,不对外公开,一定程度保证了安全性。
es5中通过提供get/set对数据的取赋值进行了操作。
封装的最好体现就是ajax和jquery。
1.节省代码
2.便于开发维护
3.方便扩展重写代码结构
单根性:一个类只能继承另一个类的属性和方法,继承不能实现多继承,避免代码的复杂性(一个儿子只能有一个爹)。
传递性:类的继承是可以传递下去的,也就是说类A继承类B , 类C继承类A ,那么C同样会继承B的方法和属性。
IT综合服务商
智慧旅游解决方案专家

