《AS3 Expert》_2:FB与FD代码智能提示的隐匿陷阱

2024-01-05 19:18

本文主要是介绍《AS3 Expert》_2:FB与FD代码智能提示的隐匿陷阱,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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对于 this的说明很明确,以下语句摘自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);

这篇关于《AS3 Expert》_2:FB与FD代码智能提示的隐匿陷阱的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/573891

相关文章

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

活用c4d官方开发文档查询代码

当你问AI助手比如豆包,如何用python禁止掉xpresso标签时候,它会提示到 这时候要用到两个东西。https://developers.maxon.net/论坛搜索和开发文档 比如这里我就在官方找到正确的id描述 然后我就把参数标签换过来

让树莓派智能语音助手实现定时提醒功能

最初的时候是想直接在rasa 的chatbot上实现,因为rasa本身是带有remindschedule模块的。不过经过一番折腾后,忽然发现,chatbot上实现的定时,语音助手不一定会有响应。因为,我目前语音助手的代码设置了长时间无应答会结束对话,这样一来,chatbot定时提醒的触发就不会被语音助手获悉。那怎么让语音助手也具有定时提醒功能呢? 我最后选择的方法是用threading.Time

poj 1258 Agri-Net(最小生成树模板代码)

感觉用这题来当模板更适合。 题意就是给你邻接矩阵求最小生成树啦。~ prim代码:效率很高。172k...0ms。 #include<stdio.h>#include<algorithm>using namespace std;const int MaxN = 101;const int INF = 0x3f3f3f3f;int g[MaxN][MaxN];int n

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

智能交通(二)——Spinger特刊推荐

特刊征稿 01  期刊名称: Autonomous Intelligent Systems  特刊名称: Understanding the Policy Shift  with the Digital Twins in Smart  Transportation and Mobility 截止时间: 开放提交:2024年1月20日 提交截止日

基于 YOLOv5 的积水检测系统:打造高效智能的智慧城市应用

在城市发展中,积水问题日益严重,特别是在大雨过后,积水往往会影响交通甚至威胁人们的安全。通过现代计算机视觉技术,我们能够智能化地检测和识别积水区域,减少潜在危险。本文将介绍如何使用 YOLOv5 和 PyQt5 搭建一个积水检测系统,结合深度学习和直观的图形界面,为用户提供高效的解决方案。 源码地址: PyQt5+YoloV5 实现积水检测系统 预览: 项目背景

代码随想录冲冲冲 Day39 动态规划Part7

198. 打家劫舍 dp数组的意义是在第i位的时候偷的最大钱数是多少 如果nums的size为0 总价值当然就是0 如果nums的size为1 总价值是nums[0] 遍历顺序就是从小到大遍历 之后是递推公式 对于dp[i]的最大价值来说有两种可能 1.偷第i个 那么最大价值就是dp[i-2]+nums[i] 2.不偷第i个 那么价值就是dp[i-1] 之后取这两个的最大值就是d

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip