1、工厂模式
function work(name, sex) {
var obj = new Object();
obj.name = name;
obj.sex = sex;
obj.sleep = function () {
return "正在睡觉!";
};
return obj;
}
var object = work("毛豆", "男");
console.log(typeof object);//返回object
特点:解决了创建多个对象的问题,但是没有结解决对象识别的问题
2、构造函数模式
function bullet() {
this.width = 20;
this.height = 15;
this.speed = 10;
this.g = 9.8;
this.flymove = function () {
}
}
var b = new bullet();
console.log(b);//bullet对象
特点:没有显示的创建对象,没有返回语句,直接将属性赋给this对象,将bullet的实例对象标识为一种特定的类型
缺点:每个方法在每个实例上面都需要重新定义一遍
3、原型模式
function person() {
}
person.prototype.sleep = function () {
return "睡觉";
};
person.prototype.name = "张三";
var p = new person();
console.log(p);
var p1 = new person();
console.log(p1);
特点:省略了为构造函数传递初始化参数,结果所有实例享有相同的属性
4、组合使用构造函数与原型模式
function f1() {
this.name = "毛豆"
}
f1.prototype.sleep = function () {
return "睡觉"
};
var f = new f1();
console.log(f);
特点:构造函数用于定义实例属性,原型定义共享的属性和方法
5、单例模式
定义:产生一个类的唯一实例,是软件设计中较为简单但是很常用的一种设计模式。
核心:确保只有一个实例,并提供全局访问
var obj = (function () {
var newobj;
function getobj() {
if (newobj == undefined) {
newobj = new factory();
}
return newobj;
}
function factory() {
this.name = "";
this.sex = "";
this.sleep = function () {
}
}
return {
getObj: getobj
}
})();
console.log(obj.getObj());