转自:http://www.hubwiz.com/


  JavaScript语言基于函数和原型链继承机制的方式构建可重用的组件。这对于面向对象编程来说显得比较笨拙。在下一代的JavaScript标准将为我们提供基于class base的面向对象的设计方式。但在TypeScript中可以使用这种方式,它将编译为目前大多数浏览器能允许的普通JavaScript代码,所以我们不用在等下一代Javascript标准的到来了。

  类是面向对象编程的核心基础,是属性和方法的集合,类不能真接编写程序时引用,必须实例化后才能使用。

  创建一个TypeScript类时,必须使用关键字class进行声明,该关键字后紧跟类的名称,之后用大括号将类体进行封装,类的基本声明格式如下


    class 类名{

           //类体

    }


  创建完成类的基本结构后就可以编写类体。类体中主要包括属性和方法的声明及定义,当然也可能在类体中只定义属性或只定义方法,甚至类体内可以不定义任何属性。完整的类的定义格式如下。



    class 类名{

     name:string;  //定义类的属性

 

     fun(){ //定义类的方法

              //定义该方法所要实现的功能

     }

    }


属性和方法的定义


  通过以上介绍,已经可以对类的属性和方法有所了解,下面具体介绍类体内属性和方法的定义和使用。

  (1)属性:类的属性实质为在类体内定义的变量,用于保存或设置参数。

  (2)方法:类的方法实质为在类体内定义的函数,用于实现某项功能,其定义方法与普通函数定义方法相同,同时可以应用访问权限关键字对方法访问权限进行限制。


    class 类名{

     name:string;  //定义类的属性

 

     fun(){ //定义了一个无返回值的方法

              //定义该方法所要实现的功能

     }

     say():string{ //定义返回值类型为string的方法

              //定义该方法所要实现的功能

            return "返回值"; // 用return关键字返回函数值

     }

    }


静态属性


  TypeScript可以使用“static” 关键字标注类的成员。如下代码:



    class calc{

     static count=10;

     add(data1:number):number{

       var sum=calc.count+data1;

       return sum;

     }

    }

    var test=new calc();

    document.write(test.add(20));


  类成员的静态属性我们可以直接调用,调用方式为如上例的count的调用方式:calc.count。而不能用this.count在类的内部使用。


构造函数


  构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。而TypeScript的构造函数用关键字constructor来实现。可以通过this(和java/C#一样代表对象实例的成员访问)关键字来访问当前类体中的属性和方法。


    class student{  //定义student类

     name:string;  //定义类的属性

     constructor(myname:string){ //定义构造函数

         this.name=myname;

     }

     study(){ //定义类的方法

              //定义该方法所要实现的功能

     }

    }


类的实例化


  一般情况下,创建一个类后并不能直接的对属性和方法进行引用,必须对类进行实例化,即创建一个对象。TypeScript中用new 关键字创建对象。实例化后通过“.”来访问属性和方法。实例代码如下:


    class student{  //定义student类

     name:string;  //定义类的属性

     constructor(myname:string){ //定义带参数的构造函数

     this.name=myname;

     }

      study(){ //定义类的方法

         document.write("<h1> My name is "+this.name+".</h1>");

     }

      write():string{

              return "write name:"+this.name;

     }

    }

    var s1=new student("Jim");

    document.write("<h1>"+s1.name+"</h1>"); //获取name属性

    s1.study();   // 调用study方法  

    document.write("<h1>"+s1.write()+"</h1>");


继承


  TypeScript中用关键字extends指明继承关系。例如,已经定义了类A,如果让类B继承A,我们把A叫做基类,B叫子类。可以用下面的方式定义类B。


    class B extends A {

         // 类B中的成员

    }


  如果我们要在子类中调用基类中的属性与方法就要使用super关键字。如下代码:



    class Animal {  //定义基类

     name:string;

     constructor(theName: string) { this.name = theName; }

      move(meters: number) {

         document.write(this.name + " moved " + meters + "m.");

     }

    }

 

    class Snake extends Animal { //继承基类

     constructor(name: string) {

         super(name); //调用基本类的构造函数

     }

      move() { //重写了基类的方法

       document.write("Slithering...<br>");

       super.move(5); //调用基类的方法

     }

    }

    var sam = new Snake("Python"); //声明Snake类

    sam.move();


  在TypeScript中我们采用“extends”关键字来表示类的继承关系。在这里你可以看见“Snake”继承“Animal”的子类实现。在实例中也展示如何去重写父类的方法,在这里“Snake”创建了一个“move”方法来重写父类“Animal”的“move”方法,并通过“super”关键字来调用父类的方法。