JS设计模式

一、工厂模式

解决了创建过个对象的问题,但没有解决对象识别的问题(怎样知道一个对象的类型)

优点:避免创建多次对象

function Factory(n,s){
    //创建一个对象
    var obj={};
    obj.name=n;
    obj.sex=s;
    obj.sleep=function(){
        return this.name+"睡觉";
    }
    return obj;

}
console.log(Factory("lisi","男"));
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.sex="男";
console.log(per1);
console.log(per1.sleep("打呼噜"));

四、单例模式

定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点
核心:确保只有一个实例
实现:闭包

function Person(name){
    this.name=name;

}
Person.prototype.getName=function(){
    return this.name;
}
var getObject=(function(){
    var instance=null;
    return function(info){ //闭包
        if(!instance){
            instance=new Person(info);
        }
        return instance;
    }
    //返回一个单独的对象
})()
//调用单例模式
console.log(getObject("张三").getName());//张三
console.log(getObject("李四").getName());//张三
console.log(getObject("王五").getName());//张三

这种单例只针对new Person的,那要设置多个类对象,可以把单例方法抽为一个共享方法:

function Person(name) {
    this.name = name;
}
Person.prototype.getName = function () {
    return this.name;
}
var getInstance = function (callback) {
    var instance = null;
    //闭包
    return function () {//不写形参  直接使用arguments  集合列表

        if (!instance) {
            //实例化对象的

            /*callback 是回调函数  返回一个对象
             apply  call    替换对象的时候可以直接执行函数*/
            instance = callback.apply(this, arguments);
        }
        return instance;
    }
}

console.log(getInstance(function () {
    //这个匿名函数内部返回一个对象
    var per = new Person("李四");
    return per;
})().getName());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值