单例模式
单例模式里的命名空间
var utils = {
select: function () {
}
}
var tabRender = {
change: function () {
utils.select(); //在自己的命名空间下调用其他命名空间的方法
}
}
var searchRender = {
change: function () {
// searchRender.clickEven();//这样不好,因为当想改变searchRender的时候要修改的地方太多了
this.clickEven(); //在自己的命名空间下调用自己命名空间的方法
}
}
单例模式虽然解决了分组的作用,但是不能实现批量的生产,属于手工作业模式。
工厂模式
工厂模式把实现同一件事情的相同代码放到一个函数中,以后如果再想实现这个功能,不需要从新编写这些代码,只需要执行当前工长函数即可。它实现了“高内聚低耦合“,减少了页面中的冗余代码,提高代码的重复利用率。
function createJsPerson (name, age) {
var obj = {}
obj.name = name
obj.age = age
obj.writeJs = function () {
console.log(`my name is ${this.name}, I can write js`)
}
return obj
}
let p1 = createJsPerson('小明',20)
p1.writeJs()
let p2 = createJsPerson('小丽', 18)
p2.writeJs()
重载: 方法名一样,参数个数或类型不一样就做重载。
JS中不存在重载,因为如果方法名一样的话,后面的会把前面的覆盖掉,最后只保留一个。
JS中有一个操作类似重载但是不是重载:我们可以根据传递参数的不同,实现不同的功能。
例如:
function sum (num) {
if (typeof num === 'undefined') {
return 0
}
return num
}
重写:
构造函数模式
构造函数模式和工厂模式的区别?
- 执行的时候:
普通函执行-> createJsPerson()
构造函数执行 -> new createJsPerson()
构造函数中的this,是当前类的一个实例。