关于我自己

关于我自己
2010年10月01日
  上次介绍过 AS3 internal namespace 技巧
  它是可以动态存取外层区域变数的
  可是想要存取同一层 scope chain 却遇到问题 package { import flash.display.Sprite; public class ScopeTest extends Sprite { public function ScopeTest() { var var1:String = "Variable 1"; trace(internal::["var1"]); } } }
  编译并执行以上的程式会拿到一个 Error
  ReferenceError: Error #1081: global 上找不到属性 var1,且没有预设值。
  假如加上 try...catch 捕捉例外,它又可以正常执行了!
  可能 try...catch 也算是多一层 scope 吧
  测试到后来,发现只要在该层随便加上 try...catch、function closure、with block
  都能让 internal namespace 可以动态存取同一层的区域变数
  以下是完整范例:
  利用 try...catch 让 internal namespace 存取该层变数 package { import flash.display.Sprite; public class ScopeTest extends Sprite { public function ScopeTest() { var var1:String = "Variable 1"; var var2:String = "Variable 2"; var var3:String = "Variable 3"; trace(internal::["var" + int(Math.random() * 3 + 1)]); // Variable 1 - 3 try {} catch (e:*) {} } } }
  利用 function closure 让 internal namespace 存取该层变数 package { import flash.display.Sprite; public class ScopeTest extends Sprite { public function ScopeTest() { var var1:String = "Variable 1"; var var2:String = "Variable 2"; var var3:String = "Variable 3"; trace(internal::["var" + int(Math.random() * 3 + 1)]); // Variable 1 - 3 (function():*{}); } } }
  利用 with block 让 internal namespace 存取该层变数 package { import flash.display.Sprite; public class ScopeTest extends Sprite { public function ScopeTest() { var var1:String = "Variable 1"; var var2:String = "Variable 2"; var var3:String = "Variable 3"; trace(internal::["var" + int(Math.random() * 3 + 1)]); // Variable 1 - 3 with(0); } } }
  相关连结:
  AS3 技巧 - 利用 internal namespace 动态存取 scope chain 的区域变数
  AS3 利用 with, Proxy 选择性替换 Scope Variables
  ActionScript "with" Block Scope 遮蔽效应
  ActionScript 3.0 - Function Closure
  AS 3.0 利用匿名函式模拟多层 Block Scope
  ActionScript 3 Namespace
  转载请注明出处 http://ticore.blogspot.com/2010/10/as3-internal-na mespace-scope-chain.html
  [b] 2 意见 : [/b]
  Gene 提到...
  原来try catch 和 with 也会让local变成trait,下次要小心用了,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值