- 论坛徽章:
- 0
|
ActionScript 提供 getter 和 setter 以存取类的属性. 在 OOP 编程的角度, 是出于类的封装性考虑, 类的继承 (protected) 和私有化 (private) 的属性不能直接暴露在外, 外部只能通过存取方法访问和修改.
假设现在有一个去理发的女生, 年龄只有她自己知道, 发型师可以获知她的发质, 知道并可以改变她的发型. 那么 ActionScript 类可以定义如下:
- public class Lady {
-
-
// 年龄
-
private var _age:int;
-
-
// 发质
-
protected var _hairQuality:String;
-
public function get hairQuality():String {
-
return this._hairQuality;
-
}
-
-
// 发型
-
private var _hairStyle:String;
-
public function get hairStyle():String {
-
return this._hairStyle;
-
}
-
public function set hairStyle(value:String):void {
-
this._hairStyle = value;
-
}
-
-
public function Lady() {
-
this._age = 24;
-
this._hairQuality = "damaged";
-
this._hairStyle = "fashion";
-
}
-
-
}
由代码可以看出, 通过存取方法可以选择性地开放外部对属性的操作. 存取方法的写法也与一般的方法写法不同点在于 get 和 set 关键字. 一旦写为存取方法, 其调用方式将与常规方法不同, 将通过点运算符进行操作, 如:
- var lady:Lady = new Lady();
-
if(lady.hairStyle == "gliding") {
-
lady.hairStyle = "fashion";//如果使用getter,setter则可以像访问public属性一样直接用
-
}
另外, 使用存取方法还可以覆盖从超类继承来的属性, 这是常规类属性不能做到的, 可以对从超类继承的 getter 和 setter 方法使用 override 属性.
ActionScript 存取方法的思想和 C# 中 "域 (field)" 的概念几乎一样, 倡导开发者不使用 public 声明属性, 而通过 getter 和 setter 对外提供服务. 而 C# 要求同一个属性的 getter 和 setter 写在一起, 可以减少开发者遗漏和犯错.
或许因为我很长一段时间在敲 Java, 这种类似原型 (prototype) 的调用方式让我感到难受. 如果用 Java 对上面的 Lady 再写一遍, 会是这样的...
- public class Lady {
-
-
// 年龄
-
private int _age;
-
-
public Lady() {
-
this._age = 24;
-
this._hairQuality = "damaged";
-
this._hairStyle = "fashion";
-
}
-
-
// 发质
-
protected String _hairQuality;
-
protected String getHairQuality {
-
return this._hairQuality;
-
}
-
-
// 发型
-
private String _hairStyle;
-
public String getHairStyle() {
-
return this._hairStyle;
-
}
-
public void setHairStyle(String value) {
-
this._hairStyle = value;
-
}
-
-
}
Java 恨不得将所有属性设为继承和私有, 而通过对外的方法提供信息. 在外部调用时, 其调用方法与常规方法无异, 如果不是 JavaBean, 没有任何特殊要求. 好处是什么? 属性是属性, 方法是方法, 没有存取方法什么的这种特殊类型, 所以代码可以更加清晰易懂.
我是比较习惯 Java 的写法, 将会尝试将这种写法用在 ActionScript 中.
本文摘自:http://www.neoease.com/actionscript-keywords-get-and-set/
更详细的getter和setter可以参考官方文档: http://help.adobe.com%2Fzh_CN%2FAction.%2F3.0_ProgrammingAS3%2FWS5b3ccc516d4fbf351e63e3d118a9b90204-7f30.html%23WS5b3ccc516d4fbf351e63e3d118a9b90204-7fcb
|
|