[]希望能介绍下编译as的大致过程
我在使用laya过程中,对比了很多as代码和生成的js代码,得到了一些猜测性的结论:
1. 编译as到js是一个较直白的过程,推测编译器并没有生成抽象语法树,再根据它生成js,而是做了某种翻译。
2.假设存在一个地方:同样语法js规范和as规范不一致,实际上应该按js的规范来理解代码。也就是理解代码的行为其实要看js的行为。
3.假设存在一个地方,同样的结果js和as语法不同,那就只支持js的语法。(例如parseInt)。
支持我猜测的例子其一是编译前后的代码对比;另外一个例子,是laya官网说的parseInt的例子,恰恰是as里没有但js里有的方法。所以我猜测是为了编译方便,干脆让用户写js的这个方法。
如果这个内容不是机密的话,恳请官方对于具体编译过程稍微介绍一下。因为明白了这个的话对开发时思考的方式还是有一些影响的。
或者换句话问,我开发的时候,虽然写着as,但我完全按照js的思想来思考代码的行为。这个思路是正确的吗?
期待回复,谢谢!
1. 编译as到js是一个较直白的过程,推测编译器并没有生成抽象语法树,再根据它生成js,而是做了某种翻译。
2.假设存在一个地方:同样语法js规范和as规范不一致,实际上应该按js的规范来理解代码。也就是理解代码的行为其实要看js的行为。
3.假设存在一个地方,同样的结果js和as语法不同,那就只支持js的语法。(例如parseInt)。
支持我猜测的例子其一是编译前后的代码对比;另外一个例子,是laya官网说的parseInt的例子,恰恰是as里没有但js里有的方法。所以我猜测是为了编译方便,干脆让用户写js的这个方法。
如果这个内容不是机密的话,恳请官方对于具体编译过程稍微介绍一下。因为明白了这个的话对开发时思考的方式还是有一些影响的。
或者换句话问,我开发的时候,虽然写着as,但我完全按照js的思想来思考代码的行为。这个思路是正确的吗?
期待回复,谢谢!
没有找到相关结果
已邀请:
要回复问题请先登录
1 个回复
cuixueying
赞同来自: nalley
2、是的,因为layaAir发布后就是标准的js代码,我们不能脱离js的行为规范,如果是js下不支持的,LayaAir下基本上也不支持
3、是的,因为js下没有int这个数据类型,所以你把as翻译成js后,如果强转,会报错:int is not defind,如果是var a:int是OK的,这个是因为js是弱类型语言,没有数据类型限制,编译后是var a;所以不会报错,但是int(1.455)就会报错了
我开发的时候,虽然写着as,但我完全按照js的思想来思考代码的行为。这个思路是正确的吗?
答:这个也正确,但是你也没有必要完全按照js的思想来思考代码,在代码结构、代码逻辑上你还是遵循as的来写就好,没有过多的限制,如果遇到问题及时沟通!