对象的创建
1.工厂模式创建对象
![](https://i-blog.csdnimg.cn/blog_migrate/e1ada4dc249f4c9b99225a213e8d5432.png)
2.构造器创建对象
![](https://i-blog.csdnimg.cn/blog_migrate/9b5c7aa78cb27d36562fd805804dadf6.png)
3.原型模式
/*构造函数存在的缺陷就是,若对象有很多个方法那么就要创建很多个全局函数,这样封装性就不是特别好,而原型模式就是解决这个问题的,每个函数都有一个prototype属性,该属性是一个指针,指向一个对象。*/
![](https://i-blog.csdnimg.cn/blog_migrate/65cd4f2feccdcf1556e955c517fbd874.png)
//4.构造函数和原型模式的组合使用
继承
1.原型链![](https://i-blog.csdnimg.cn/blog_migrate/4e0103ad45f90e5cee3087f2c7b931ad.png)
2.构造函数
在子类型的构造函数中调用超类的构造函数
![](https://i-blog.csdnimg.cn/blog_migrate/f4bb32161bc9608ef26411ce0212fc48.png)
3.组合继承
![](https://i-blog.csdnimg.cn/blog_migrate/5861822cc596dec757b6994f5c433459.png)
4.原型式继承
![](https://i-blog.csdnimg.cn/blog_migrate/b9ca72f49e5f50736ad56ec31ab72ee2.png)
5.寄生式继承
![](https://i-blog.csdnimg.cn/blog_migrate/8a0d4473dee3f39aa336284c5d85051f.png)
6.寄生组合式继承
//函数 先定义,后使用
function functionName(){}
//函数的定义方式2:
var functionName=function(){}
//注意 argument.callee()在递归的时候调用