工厂模式
- 单例模式虽然解决了分组的作用,但不能实现批量的生产
- 工厂模式把实现同一间事情的相同代码放到一个函数中,以后如果再想实现这个功能,不需要重新编写这些代码,只需要执行当前的函数即可,也叫–>“函数的封装”
-减少页面中的冗余代码,提高代码的重复利用率–>低耦合高内聚
-面向对象:函数的封装,继承(子类继承父类的方法和属性等,祖传),多态:包括重载和重写,js中只有重写,但是却可以模拟重载.
- js中有一个操作类似重载但不是重载的,我们可以根据传递参数的不同,实现不同的功能
function sun(num){
if (typeof num ==="undefined"){
return 0;
}
return num;
}
sum(100);
sum();
构造函数模式和工厂模式的区别:
- 执行的时候
-普通函数执行:createJsPerson()
-构造函数模式:new CreateJsPerson() 通过new执行后,我们的CreateJsPerson就是一个类了,而函数执行的返回值(p1)就是CreateJsPerson这个类的一个实例–>JS中所有的类都是函数数据类型的,通过new执行变成了一个类,但是它本身是一个普通的函数 ->JS中所有实例都是对象数据类型的
- 在函数代码执行的时候
-相同点:都是形成一个私有的作用域,然后 形参赋值->预解释->代码重上到下执行
-不同点:
->在代码执行之前,不同自己手动创建一个obj对象,浏览器会默认返回一个对象类型的值(这个对象其实就是我们当前类的一个实例)
->接下来代码开始从上到下执行,以当前的实例为执行的主体(this代表的就是当前的实例),然后分别把属性名和属性值赋值给当前的实例
->最后浏览器会默认把创建的实例返回
–>JS中所有的类都是函数数据类型的,通过new执行变成了一个类,但是它本身是一个普通的函数
->JS中所有实例都是对象数据类型的
->p1和p2都是CreateJsPerson这个类的实例,所以都拥有writeJs这个方法,但是不同实例之间的方法是不一样的。在类中给的实例增加的属性(this.xxx = xxx)属于当前实例的私有的实行,实例和实例之间是单独的个体,所以私有的属性之间是不相等的
//console.log(p1.writeJs === p2.writeJs)//false
function Fn(){
var num = 10;// window
this.x = 100