必威体育Betway必威体育官网
当前位置:首页 > IT技术

JavaScript高级程序设计之设计模式

时间:2019-09-28 05:45:42来源:IT技术作者:seo实验室小编阅读:86次「手机版」
 

javascript高级程序设计

工厂模式:

此种模式是软件工程领域中的一个广为认知的设计模式,抽象了创建具体对象的过程,利用函数来封装以特定接口创建对象的细节。通过多次传参调用函数来创建具有多个属性和方法的对象。

1.优点:解决了创建多个相似对象的问题,操作简单

2.缺点:没有解决对象具体识别的问题,这是简单地识别为object类型,并没有具体化

代码如下:

    function createPerson(name,age,job){
        var o=new Object();
        o.name=name;
        o.age=age;
        o.job=job;
        o.sayName=function(){
            alert(this.name);
        };
        return o;
    }
    var person1=createPerson("mimi",18,"Software Engineer");
    var person2=createPerson("nene",28,"Doctor");

构造函数:

1.优点:可以创建特定类型的对象,没有显示创建对象,不用return返回值,操作简单方便,只要利用new操作符即可

2.缺点:每个方法都要在每一个实例上创建一遍,这样会导致当对象之间存在过多相同属性和方法时,存在大量的代码冗余。

例代码如下:

    function createPerson(name,age,job){
        this.name=name;
        this.age=age;
        this.job=job;
        this.sayName=function(){
            alert(this.name);
        };
    }
    var person1=new Person("mimi",18,"Software Engineer");
    var person2=new Person("nene",28,"Doctor");

原型模式:

1.优点:此模式最大的优点就是完美解决了第二种模式中的缺点:可以让所有对象实例共享它包含的属性和方法,不必在构造函数中定义对象市里的信息,而是将这些信息直接添加到原型对象中

2.缺点:它的缺点正好也是由于它的优点导致的,它将所有信息都进行了共享,但实际上我们在开发过程,并不是希望所有信息都是共享的,有一部分共享,有一部分属于自己的独特的属性。

所以我们可以将第二种和第三种模式结合起来,解决此种问题,得到第四种设计模式。

 function Person(){
        
    }
    Person.prototype.name="mimi";
    Person.prototype.age="15";
    Person.prototype.job="Doctor";
    Person.prototype.sayName=function(){
        alert(this.name);
    };
    var person1=new Person();
    person1.sayName();//mimi
    var person2=new Person();
    person2.sayName();//mimi

组合使用构造函数模式和原型模式:

每一个实例都会有自己的一份实例属性的副本,但同时又共享着对方法的引用,最大限度的节省了内存,此种模式还支持传递参数。所以此种模式也是ECMAScript使用最广泛、认同度最高的一种创建自定义类型的方法。

例如下代码:

    //利用构造函数添加各自的属性,保持自己的独立性
    function Person(name,age,job){
        this.name=name;
        this.age=age;
        this.job=job;
        this.friends=["Shelby","Court"];
    }

    //利用原型共享彼此信息,保证信息共享
    Person.prototype={
        constructor:Person,
        sayName:function(){
            alert(this.name);
        }
    }
    var person1=new Person("Nicholas","29","Software Engineer");
    var person2=new Person("Greg","27","Doctor");
    person1.friends.push("Van");
    console.log(person1.friends);
    console.log(person2.friends);
    console.log(person1.sayName);
    console.log(person2.sayName);
    console.log(person1.friends === person2.friends);
    console.log(person1.sayName === person2.sayName);

相关阅读

google高级搜索技巧

1、OR 和 AND OR: 返回的结果是包含OR两边的任意关键词,比如: amazon OR ebay AND: 返回的结果是包含AND两边的关键词,比如: amazon

设计模式——适配器模式

本文主要参考资料:《设计模式之禅》 本文主要目录为:1)案例 2)适配器模式解决 3)适配器模式的定义 4)拓展 1. 案例 比如我们现在有

Jmeter4.0+Ant集成 build.xml高级配置

批量执行某一目录下多个测试脚本,build.xml文件如下 <?xml version="1.0" encoding="UTF-8"?> <project name="ant-jmeter-test"

JavaScript:void(0)含义

相信很多人经常会看到:javascript: void(0),那么你知道它是什么意思吗? javascript:void(0) 中最关键的是 void 关键字, void 是 Ja

Playbook高级技巧进阶

6.1 巧用Includes Includes在Ansible中主要起引用功能,其功能非常强大,不仅可以引用Playbook的YML文件,而且Vars、Handlers、File

分享到:

栏目导航

推荐阅读

热门阅读