Actionscript 3 什么是[对象全局性],何时;这";是否在嵌套函数或内联函数中访问?
代码如下:Actionscript 3 什么是[对象全局性],何时;这";是否在嵌套函数或内联函数中访问?,actionscript-3,actionscript,Actionscript 3,Actionscript,代码如下: package { import flash.events.*; import flash.display.*; public class SomeDocumentClass extends MovieClip { public var abc: MovieClip; public var test_var = 12345; public function SomeDocumentClass() {
package {
import flash.events.*;
import flash.display.*;
public class SomeDocumentClass extends MovieClip {
public var abc: MovieClip;
public var test_var = 12345;
public function SomeDocumentClass() {
//abc is an instance name of a movieclip placed on stage
abc.addEventListener(MouseEvent.CLICK,
function () {
trace(this);
});
abc.addEventListener(MouseEvent.CLICK, abc_CLICK)
}
function abc_CLICK(e: Event): void {
trace(this);
}
}
}
输出为:
[对象全局]
[对象类]
我还检查了,[object global]
甚至不是函数本身。那么它是什么呢?匿名函数(也称为函数表达式)是全局作用域,而定义的函数(也称为函数语句)是局部作用域
匿名函数
- 不能用作方法
- 仅在定义它的范围内存在
- 只能在定义它的范围内调用
- 可以在代码中的任意点调用
- 可以重新分配新值或删除
- 可以用作对象的方法
- 存在于定义它的对象中
- 可以在代码中的任意点调用
- 无法删除或更改
这是匿名函数中的
[trace] [object global]
[trace] global
[trace] <type name="global" base="Object" isDynamic="true" isFinal="true" isStatic="false">
[trace] <extendsClass type="Object"/>
[trace] <constant name="FLASH10_FLAGS" type="uint" uri="avmplus"/>
~~~~~~~~~~~~
[trace] </method>
[trace] </type>
ActionScript剪切/粘贴完整示例:
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import avmplus.getQualifiedClassName;
import flash.utils.describeType;
public class Main extends Sprite {
var button:CustomSimpleButton;
public function Main() {
button = new CustomSimpleButton();
button.addEventListener(MouseEvent.CLICK,
function () {
trace(this);
trace(getQualifiedClassName(this));
trace(describeType(this));
});
button.addEventListener(MouseEvent.CLICK, onClickButton);
addChild(button);
}
function onClickButton(event:MouseEvent):void {
trace(this);
trace(getQualifiedClassName(this));
trace(describeType(this));
}
}
}
import flash.display.Shape;
import flash.display.SimpleButton;
class CustomSimpleButton extends SimpleButton {
private var upColor:uint = 0xFFCC00;
private var overColor:uint = 0xCCFF00;
private var downColor:uint = 0x00CCFF;
private var size:uint = 80;
public function CustomSimpleButton() {
downState = new ButtonDisplayState(downColor, size);
overState = new ButtonDisplayState(overColor, size);
upState = new ButtonDisplayState(upColor, size);
hitTestState = new ButtonDisplayState(upColor, size * 2);
hitTestState.x = -(size / 4);
hitTestState.y = hitTestState.x;
useHandCursor = true;
}
}
class ButtonDisplayState extends Shape {
private var bgColor:uint;
private var size:uint;
public function ButtonDisplayState(bgColor:uint, size:uint) {
this.bgColor = bgColor;
this.size = size;
draw();
}
private function draw():void {
graphics.beginFill(bgColor);
graphics.drawRect(0, 0, size, size);
graphics.endFill();
}
}
这是内联函数中的结果,因为它在任何地方都没有作用域(它是应用程序的顶级作用域)。不要使用内联函数,使用它们几乎没有任何好处。也许这可以帮助你理解:
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
import avmplus.getQualifiedClassName;
import flash.utils.describeType;
public class Main extends Sprite {
var button:CustomSimpleButton;
public function Main() {
button = new CustomSimpleButton();
button.addEventListener(MouseEvent.CLICK,
function () {
trace(this);
trace(getQualifiedClassName(this));
trace(describeType(this));
});
button.addEventListener(MouseEvent.CLICK, onClickButton);
addChild(button);
}
function onClickButton(event:MouseEvent):void {
trace(this);
trace(getQualifiedClassName(this));
trace(describeType(this));
}
}
}
import flash.display.Shape;
import flash.display.SimpleButton;
class CustomSimpleButton extends SimpleButton {
private var upColor:uint = 0xFFCC00;
private var overColor:uint = 0xCCFF00;
private var downColor:uint = 0x00CCFF;
private var size:uint = 80;
public function CustomSimpleButton() {
downState = new ButtonDisplayState(downColor, size);
overState = new ButtonDisplayState(overColor, size);
upState = new ButtonDisplayState(upColor, size);
hitTestState = new ButtonDisplayState(upColor, size * 2);
hitTestState.x = -(size / 4);
hitTestState.y = hitTestState.x;
useHandCursor = true;
}
}
class ButtonDisplayState extends Shape {
private var bgColor:uint;
private var size:uint;
public function ButtonDisplayState(bgColor:uint, size:uint) {
this.bgColor = bgColor;
this.size = size;
draw();
}
private function draw():void {
graphics.beginFill(bgColor);
graphics.drawRect(0, 0, size, size);
graphics.endFill();
}
}