工厂模式
避免创建多次对象
function Factory(n,s){
//创建一个对象
var obj={};
obj.name=n;
obj.sex=s;
obj.sleep=function (){
return this.name+"睡觉";
}
return obj;
}
console.log(Factory("李四", "男"));
console.log(Factory("张三", "男"));
构造函数模式
直接定义函数 this(指针) 指向当前实例的对象
function Page(){
this.nowpage=1;
this.totlepage=20;
this.data=null;
this.createpageLi=function (){
console.log("构造函数模式的方法");
}
}
//实例化对象
var page=new Page();
原型模式
原型对象上所有的属性和方法共享
function Person() {}
//原型独享的属性 方法
Person.prototype = {
name: "",
sex: "",
sleep: function (m) {
return this.name + "睡觉" + m;
}
}
var per1 = new Person();//实例化
per1.name = "张三";//per1的属性
per1.sex = "男";//per1的属性
console.log(per1);
原生JS设计
单例模式
一个类仅提供一个实例,并且暴露出一个全局访问点
替换元素对象this指针:call(this,序列参数) apply(this,数组参数)
var getobj = function (callback) {//callback=new Array()
var instance = null; //instance在外闭包
//不写形参 直接使用arguments 集合列表
return function () { // = getobj(callback)
if (!instance) {
//实例化对象的
//callback 是回调函数 返回一个对象
instance = callback.apply(this, arguments);
}
return instance;
}
}
//类1 person
var person = getobj(function (name) {//person(name)
var call = new Person(name);
return call;
});
console.log(person("lisa"),person("trankle"));
//类2 animal
var animal = getobj(function (name) {//animal(name)
var call = new Animal(name);
return call;
});
console.log(animal("来福"),animal("花卷"));
策略模式
策略模式是将算法和 算法的使用分离