距离上一次写的关于H5的已经一月有余了,上次说道去了解Egret,发觉如果单单是去看官网的API 还是有些不够的。同时也要对TypeScript进行一些了解才行。以下是一些基础的学习记录。多数其实也是和AS3进行一种对比。

 

1、TypeScript后缀为ts,编译之后会生成js,而我们要在html调用ts文件的话,如ts 那么我们在引用的时候要写helloworld.js;

<script type=“text/javascript” src=“helloworld.js”></script>

以上写法是必须的 不能像下面这样

<script type=“text/javascript” src=“helloworld.js”/>

2、TS的基本数据类型 有 number、any、Array、boolean

3、数组的定义 var arr:number[]=[];var arr:Array<number>=[];

Ps:这个就有点类似于AS3中的Verctor,如果要用类似AS3中的Array的话可以是 var arr:any[]=[];即允许任何类型

4、ts可以调用外部的js库,如果要调用 那么必须包含一个声明文件.d.ts 并且需要进行引用 ts中引用外部文件库的方法是。

///<reference path=”jquery.d.ts”/>
///<reference path=”ClassTest.ts”/>

这个引用直接在ts文件里面的最前面写即可  千万不要把///当做注释了 一定要写上

5、TS中也有for in 这种关键字 但是key只能是number型

如var obj:Object={}; for( var key in obj){}这样即可,不能用key:string;

6、TS中定义类。这里所谓的类即模块 语法如下

module CT{
export class MM{
constructor(){}
getMsg(){
}
}
}

其中 CT是所谓的模块 个人感觉类似于包的概念 MM是这个类的名字 和文件名无关这点和AS3有区别。如果我们实例化MM这个类 那么应该是

///<reference path=”f/MM.ts”/>注:此处假设MM这个类位于f文件夹中

var mm:CT.MM = new CT.MM()

然后其他的调用方式和AS3类似 如 mm.getMsg();TS分有public 和private 默认情况下 是public 对于全局函数 不要写function .局部函数需要写

这就不难理解为啥egret 的很多API需要加上 egret.前缀了 这个就是模块化

如果我们在一个ts文件中调用这个ts文件里面定义的类 则不需要上面的写法

直接可以是 class MM{};  这个和as3中的包内定义类一个意思 不需要写包名;

也可以直接在ts文件中不进行模块化的书写类

class MTTT{
constructor(){
}
public nn():string{
return “mttt”;
}
}

如上,去掉了 module 和 export关键字 同样可以  但有一点无论怎么样的写法 在调用类的时候 必须进行引用 即便是处于同一目录下  而且在html <script标签中一定要加上 ts的文件名.js 即这个文件的路径 才能顺利执行 不过egretwing里面 我们不用弄标签 这个还是挺好

7、在类中调用全局函数 全局变量时 加上 this;

8、Ts的接口用法 和其他面相对象语言类似 TS也只能单继承 多实现接口

9、Ts中函数定义

局部函数直接写方法名即可 需要区分的是 private 和 public

或者可以赋给变量值 var func=function f(){}

如果要给予变量一个类型 可以是 var func:(a:number)=>number=f(a:number):number{return 1;};

var func:()=>void=f(){};

定义函数的可选参数关键字 ?   参数默认值 类似于as3  定义其余参数同样和as3一样使用… 不过有区别的是 ts中可以指定其余参数组的数据类型 也可以不指定

如 function restFunc(…infos:number[]){}

或者 function restFunc(…infos){}//同AS3;

同样ts的函数中 存在 arguments这个参数数组 同as3

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Free Web Hosting