日期:2014-05-16  浏览次数:20366 次

Unity3D里面的JavaScript和浏览器的JavaScript的大致区别

参考:http://keigoliye.blog.163.com/blog/static/1462133592010823105720114/?fromdm&fromSearch&isFromSearchEngine=yes

?

?

一直想了解Unity里面的JavaScript到底是怎么回事。也问过一次四毛(在这里好像叫威阿),后来找到一篇文章讲解的比较清楚。原本想把这篇文章翻译了(好像没人翻译吧),不过主要想把自己从前对JavaScript的一些了解和Unity做一些对照,所以不打算完全翻译了,还是按自己的理解来说一下Unity中的JavaScript,还请各位多指教。那篇文章就在Unity的Wiki里,地址在这里。
不知道写这么个东西能不能给加点威望好能进那几个非开放版块……:victory:?
我从前做过一点JavaScript的东西,和同事加起来大概写过将近2M的JavaScript脚本,粗看了一下Unity中的JavaScript,和从前所了解的基于Browser的JavaScript并不是太相像。可能也有不少朋友感觉Unity的JavaScript有点怪怪的,我在这里大概写下区别。
速度比较快
Unity的JavaScript是经过编译了的,按照文章所讲,在Unity中使用JavaScript、C#或者Boo的执行速度并没有什么区别。
语法略有不同
类:
在Unity里,一个js文件就是一个类。从前基于浏览器的JavaScript是通过prototype来实现类(我一直用的是prototype.js框架)。
在Unity,比如要写一个Hello的类,里面有一个方法叫sayHello,建立一个Hello.js,然后在里面写


复制代码?
function sayHello(){?
????????// do something?
}
就可以了。
而从前用浏览器的JavaScript实现类,实际就是写个function,比如

复制代码?
var Hello=function(){?
????????this.sayHello=function(){?
????????// do something?
?????? }?
}
如果用prototype.js框架,就这么写:

复制代码?
var Hello=Class.create();?
??Hello.prototype={?
????????initialize:function(){?
??},?
??sayHello:function(){?
}?
};
继承
在Unity里,这么写:
新建一个MyHello.js文件,然后写

复制代码?
class MyHello extends Hello{?
?????????
}
而从前基于浏览器的继承,我一般都是用prototype里的bind()方法来做。
还有虚拟函数的写法之类的,可以在那篇文章里找到。
数据类型
在Unity的JavaScript里,string叫String(S大写)。字符串必须用双引号,不能用单引号,而在从前基于浏览器的JavaScript里,单引号或者双引号随便写,也可以引号套引号。
变量必须先声明
主要可能是因为Unity里的JavaScript需要编译,所以在Unity里,变量必须事先声明才能使用,否则会出错。
变量的类型的写法
定义变量的时候,前面写var,表示是变量,然后写名字,后面跟冒号,冒号后面跟数据类型。
比如

复制代码?
var a:String;
写函数带的参数时也这么写,比如

复制代码?
function Test(param1: String, param2:Object){?
????????//fun