创建对象的几种方式(一)

第一种:用Object构造函数

  var a = new Object();

  var b = new Object();

第二种:对象字面量的方式

  var a = {};

  a.name = 'li';

  a.age = 21;

第一种和第二种创建对象的方式有个明显的缺点:使用同一个接口创建很多对象,会产生大量的重复代码。比如:我们创建一个a b c三个对象,如果给他们添加属性的时候要分别添加,那万一有一万个对象呢?一百万个呢?我们不是上帝,挥一挥衣袖,人就出来了。

我们虽然也是挥一挥衣袖,但是如果创造如此庞大的对象群体,估计就算手不残废了,键盘也得换个几百个吧!嘿嘿……。

为了解决这个问题,人们开始使用一种工厂模式的变体。

  那我们先理解一下什么是工厂模式?

    工厂模式:这是软件工程领域的一种广为人知的一种设计模式。这种模式抽象了创建具体对象的过程。

      比如写一个word那样的程序,它可以打开doc、rtf、txt等好几种文件格式,而对于这些文件的处理方法是不同的,比如txt就不能保存文字颜色字体之类的信息,那么我可能这样设计:

word主程序,一个类Application,它有一个虚方法(或抽象方法,不过C#中抽象方法只能在抽象类里)叫OpenFile,用来打开指定的文件,然后返回一个Doucument类的实例,这个类可以直接把它的内容显示在屏幕上,word处理的主体是这个类。这个Application

类还有很多方法比如关闭打印之类的。

         然后从Application类派生出一个子类TxtApplication,父类中OpenFile是虚方法,没有实现,在子类中重写这个方法,打开Txt文档,读取txt文件,然后返回一个Document类。

然后再从Application里派生一个子类RichTxtApplication,也重写OpenFile,它打开rtf文档,从里面读取相应的文档和文档的格式信息,然后也返回一个Document类。

      最后,根据一定的策略(比如用户要打开的文件的扩展名是“txt”,就实例化一个txtApplication,然后调用它的OpenFile方法获得Document;如果扩展名是“rtf”,就实例化一个rtfApplication,调用它的OpenFile方法获得Document)。

这样,Application类中的OpenFile方法就叫做工厂方法,这种“一个类希望由它的子类指定它所创建的对象”的方法就是工厂模式

    这里简单的做了一个比喻,相信大家都能够理解。

    由工厂模式在ECMAScript衍生除了很多创造对象的模式。

先介绍第一中模式:

  一、工厂模式

    function creatPerson(name,age,sex){

      var a = new Object();

      a.name = name;

      a.age = age;

      a.job = job;

      a.sayAge = function(){

        alert(this.age);

      }

      return a;

    }

  var person1 = creatPerson('li',12,'boss');

  person1.sayAge();

  我们可以无数次的调用createPerson()这个函数,用来创造对象,并且创建的对象实例里面总会有三个属性和一个方法。所以工厂模式创建了创建多个相似对象的问题,但是却没有解决对象识别的问题。于是下一个新模式就出现了。(这里先介绍一个)

  随着时代的发展,总会有新的东西取代旧东西。我们的前端亦是如此,我们只有不断的努力学习新的知识,新的思想,才不会被这个社会所淘汰。我是刚开始接触前端的小菜鸟一枚,只是想写点随笔,记录每天的点点滴滴,水平有限,希望大家能对我写的东西能进行批评指正,我都会虚心接受,虽然我现在写的东西非常的浅,只是希望有跟我一样的前端,能从中获得哪怕一小点的知识,因为我入职的是电商,以后我把我在工作中的问题与解决方案分享给大家,马上就要做自营平台了。希望自己经过这一次的挑战。能有一个很大的提升。因为现在正在学习js,所以把工作之余看的一些东西,分享给大家。希望大家都能快乐的工作,永远不放弃!^_^

posted @ 2016-03-03 15:26  我の天空  阅读(1306)  评论(0编辑  收藏  举报