博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《AS3 Expert》_2:FB与FD代码智能提示的隐匿陷阱
阅读量:4106 次
发布时间:2019-05-25

本文共 1663 字,大约阅读时间需要 5 分钟。

FB4与FD3均存在一个代码智能提示的bug,一不小心你就会写出错误的代码,并且编译器不会给你任何错误信息。
一、问题
代码 1:
  1. public function Main():void
  2. {
  3. var obj1:Object = new Object();
  4. obj1.greet = function():void
  5. {
  6. trace("hi, " + this.author);
  7. };
  8. obj1.greet();
  9. }
  10. private var author : String = "sban ";
复制代码
你觉得代码1的输出结果是“hi, sban”吗?
代码 2:
  1. public function Main():void
  2. {
  3. var arr1 :Array = ["as3", "expert", "programming"];
  4. arr1.some(
  5. function(item :String, index :int=-1, arr :Array=null) : Boolean
  6. {
  7. if (item == "as3")
  8. {
  9. trace(item, this.author);
  10. return true;
  11. }
  12. return false;
  13. }
  14. );
  15. }
  16. private var author : String = "sban";
复制代码
对于代码2,你觉得它的输出结果是“as3 sban”吗?
答案均是否。无论在代码1中,还是在代码2中,变量author均是不可访问的。然而编译器并不会报错。
代码2,是在fd3.0.6版本中编写的,当写到变量author,它给了我一条代码智能提示:
如果说FD作为一款社区开源免费产品,出现这种bug是情有可原的话,那么Adobe动辄几百美元一个licence的FB4也存在同样的bug,就今人咋舌了。
代码2,在FB4中也存在同样的智能提示:
对于As3初学者,不明白this关键字的真正涵义,在编辑器的错误误导下,并且编译器也没有任何的错误提示,很容易写出错误的代码。
在livedoc中,Adobe对于的说明很明确,以下语句摘自livedoc:
A reference to a method’s containing object. When a script executes, the this keyword references the object that contains the script. Inside a method body, the this keyword references the class instance that contains the called method.
this关键字真正涵义等同于“owner”,意指包含当前函数体的对象。在代码1中,this指obj1。在代码2中,this指一个全局的对象(并非包涵变量author的对象),所以this.author均是不可见的,编辑器向我们给出了错误的智能提示。
二、解决方案
那么,在代码1或2中,如果确实我们需要访问变量author,应该怎么做呢?答案很简单,把this关键字去掉就可以了。在AS3中,如果没有指定对象或关键字this,avm2优先在当前作用域内查找变量,如果找不到,则向上查找。
三、总结
1,关键字this指的是包涵当前函数体的上一级对象
2,未指定对象或this的变量,avm2如果在当前作用域内找不到该变量,则尝试在上一级作用域内查找。
四、思考与练习
1,想一想下面的代码的输出结果是什么?为什么?public function as3():void{var author :String = "as3 fans";trace(author);}private var author : String = "sban";
2,想一想在代码2中,如果不去掉关键字this,如何使程序得到同样的输出结果?trace(item,
this.author);

转载地址:http://agjsi.baihongyu.com/

你可能感兴趣的文章
JavaSE_day_03 方法
查看>>
day-03JavaSE_循环
查看>>
Mysql初始化的命令
查看>>
day_21_0817_Mysql
查看>>
day-22 mysql_SQL 结构化查询语言
查看>>
MySQL关键字的些许问题
查看>>
浅谈HTML
查看>>
css基础
查看>>
HTML&CSS进阶
查看>>
Servlet进阶和JSP基础
查看>>
servlet中的cookie和session
查看>>
过滤器及JSP九大隐式对象
查看>>
软件(项目)的分层
查看>>
菜单树
查看>>
MySQL-分布式架构-MyCAT
查看>>
设计模式六大原则(6):开闭原则
查看>>
阿里面试总结--JAVA
查看>>
Servlet的生命周期
查看>>
JAVA八大经典书籍,你看过几本?
查看>>
《读书笔记》—–书单推荐
查看>>