最近研究了一下JavaScript语言,发现这门语言表面上简单易学,实际上深不可测。它实现了ECMAScript标准(欧洲计算机制造商下属委员会制定的脚本语言标准),但是这个标准里面是没有“类”的概念。所以在这门语言里提到对象,实际上和在C++,C#,Java中的对象有些不同。在JS中,一切都是对象,甚至包括函数。而对象,就是一组散列表,或是名值对。比如我们创建一个小狗对象:

var dog_01=new Object();


dog_01.name="Kitty";

dog_01.age=2;

dog_01.sayName=function(){alert(this.name);};


dog_01.sayName();

  这是一种很简单的创建对象的方式。但我想大家也会感觉这种方式不太好,因为代码会显得冗余。假如我要再创建一个dog_02对象,我基本上就是要把上面的代码重新再写一遍。所以这样的程序显然是不好的,那么我们可以试着把创建对象的步骤给封装在一个函数里面,给它起个名字,叫createDog().

function createDog(name, age)
 {
    var o = new Object();

    o.name = name;

    o.age = age;
    o.sayName = function() {
        alert(this.name);

    };





    return o;


}

var dog_01 = createDog("Candy", 3);
var dog_02 = createDog("Mat", 3);
var dog_03 = createDog("Undo", 3);


alert(dog_01.sayName());//Candy
alert(dog_02.sayName());//Mat
alert(dog_03.sayName());//Undo

  这种模式在软件工程里面被称之为“工厂模式”,这个方法就像是一个工厂一样,你不断地调用它,就会源源不断地加工出来一个个“Dog”成品出来。这种用函数封装具体创建对象细节的方法工作的很好,但是我们永久了会发现一个问题,就是这种方法创建出来的对象,是没有类型的。比如字符串对象可以是String类型,数字对象可以是Number对象,函数对象是Function类型,日期对象是Date类型,那这样去创建的一个对象算是什么类型呢?充其量就是一个Object类型罢了。

  在很多编程语言里(如C#),想要创建一个具有特殊类型的对象,是需要用调用构造函数的。在JS里有一些“原生对象”,比如Data,Number,它们是直接存在于运行环境里面,不需要我们显示地去调用构造函数.如果我们想要创建自己定义的对象类型,就可以自己写构造函数,还可以添加自己的属性和方法,比如说这样:

function CreateDog(name, age) //构造函数一般大写字母开头
 {
    this.name = name;

    this.age = age;
    this.sayName = function() {
        alert(this.name);

    };

}

var dog_01 = new CreateDog("Lucky", 33);//new
var dog_02 = new CreateDog("Mat", 3);
var dog_03 = new CreateDog("Undo", 3);
alert(dog_01.sayName());
//Candy
alert(dog_02.sayName());
//Mat
alert(dog_03.sayName());
//Undo

我对这个函数做了一点修改,然后被称作为所谓的“构造函数”,调用它的时候用了new关键字。其实构造函数与一般函数也没有啥区别,只要是用new去调用一个函数就称之为调用了构造函数。我们在这个函数里没有显示地创建一个对象,而是用了this关键字。也没有返回任何对象。因为用new就是在创建对象

 

 

posted on 2013-07-25 07:39  coco_GIS  阅读(202)  评论(0)    收藏  举报