在这里写一下备忘的原则,我认为在as3中融合了java和javascript的特性,而我记录的备忘点多数是和它们不同的地方。
1、可用于修饰类定义的四个属性 ,默认是internal:
- dynamic 允许在运行时向实例添加属性。
- final 不得由其它类扩展。
- internal (默认) 对当前包内的引用可见。
- public 对所有位置的引用可见。
2、在as3中没有抽象类,所以定义类时并没有abstract关键字。
3、类中可以定义常量,变量,方法,还可以定义命名空间:
public class SampleClass
{
public namespace sampleNamespace;
sampleNamespace function doSomething():void;
}
4、在as3中允许定义同名的静态属性和实例属性。
class StaticTest
{
static var message:String = "static variable";
var message:String = "instance variable";
}
// 在脚本中
var myST:StaticTest = new StaticTest();
trace(StaticTest.message); // 输出:静态变量
trace(myST.message); // 输出:实例变量
5、可用于类成员定义的属性有:
- internal (默认) 对同一包中的引用可见。
- private 对同一类中的引用可见。
- protected 对同一类及派生类中的引用可见。
- public 对所有位置的引用可见。
- static 指定某一属性属于该类,而不属于该类的实例。
- UserDefinedNamespace 用户定义的自定义命名空间名。
6、使用 dynamic 属性声明的类中尝试访问私有变量时,不会导致运行时错误。只是变量不可见。但如果用.点运算符访问时,会在严格模式下出编译错误,用属性访问符[]就不会。
7、类的构造函数方法只能是公共方法,但可以选择性地使用 public 属性。不能对构造函数使用任何其它访问控制说明符(包括使用 private、protected 或 internal)。也不能对函数构造方法使用用户定义的命名空间。
8、在as中有一个叫做set和get存取器的东西,其实它实现的功能类似于java中的bean,实现了对私有变量的存取,但在as3中的实现有所不同。
class GetSet
{
private var privateProperty:String;
public function get publicAccess():String
{
return privateProperty;
}
public function set publicAccess(setValue:String):void
{
privateProperty = setValue;
}
}
如果尝试直接访问属性 privateProperty,将会发生错误,如下所示:
var myGetSet:GetSet = new GetSet();
trace(myGetSet.privateProperty); // 发生错误
但可以使用名为 publicAccess 的公共存取器设置 privateProperty 的值:
var myGetSet:GetSet = new GetSet();
trace(myGetSet.publicAccess); // 输出:null
myGetSet.publicAccess = "hello";
trace(myGetSet.publicAccess); // 输出:hello
9、类的方法中this关键字始终引用该方法所属的实例,这一点和javascript中有所不同,因为as3实现了自动绑定。但函数和javascript中还是一样。
class ThisTest
{
private var num:Number = 3;
function foo():void // 定义的绑定方法
{
trace("foo's this: " + this);
trace("num: " + num);
}
function bar():Function
{
return foo; // 返回的绑定方法
}
}
var myTest:ThisTest = new ThisTest();
var myFunc:Function = myTest.bar();
trace(this); // 输出:[ 全局对象]
myFunc();
/* 输出:
foo's this: [object ThisTest]
output: num: 3 */
10、在as3中接口只能包含方法但不能包含方法体。接口不能包含变量或常量,这些都和java一样,但是可以包含 getter 和 setter
11、类在实现接口时,实现的方法的参数数和每个参数的数据类型必须与接口方法的参数数和数据类型相匹配,但参数名不需要匹配
12、实现具有默认值参数的接口方法时必须采用默认参数值 ,默认参数值是与接口定义中指定的值具有相同数据类型的一个成员,但是实际值不一定匹配
//接口
interface IGamma
{
function doSomething(param:int = 3):void;
}
//实现类
class Gamma implements IGamma
{
public function doSomething(param:int = 4):void {}//默认值和接口中不一样
}
13、在父类中使用 var 或 const 关键字声明的属性,继承的子类是不能对其进行覆盖的。覆盖某一属性就表示在子类中重新定义该属性。唯一可覆盖的属性类型是方法,即使用 function 关键字声明的属性。虽然不能覆盖实例变量,但是通过为实例变量创建 getter 和 setter 方法并覆盖这些方法
14、静态方法不能继承,也不能覆盖。但是,实例方法可由子类继承(final、private的除外),也可覆盖
15、子类访问父类的静态属性是不需要类名限定符的:
class Base {
public static var test:String = "static";
}
class Extender extends Base
{
public function Extender()
{
trace(test); // 输出:静态
}
}
本方地址:http://kino.iteye.com/blog/239598 ,转载请注明,谢谢!