面向对象的编程惯例不提倡直接访问类内的属性。类通常会定义“获取”方法和“设置”方法来分别提供对给定属性的读访问和写访问。例如,假设某个类包含一个名为 userName
的属性:
var userName:String;
该类不允许其实例直接访问这个属性(例如 obj.userName = "Jody"
),而改为提供两个方法 getUserName
和 setUserName
。这两个方法的实现代码如下所示:
function getUserName:String() { return userName; } function setUserName(name:String): { userName = name; }
您可以看到,getUserName
返回 userName
的当前值,而 setUserName
将 userName
的值设置为传递给该方法的字符串参数。这样,该类的实例将使用以下语法来获取或设置 userName
属性。
// 调用“获取”方法 var name = obj.getUserName(); // 调用“设置”方法 obj.setUserName("Jody");
但是,如果您想使用更简明的语法,可以使用隐式 获取/设置方法。利用隐式获取/设置方法能够以直接访问的方式访问类属性,同时还可以保持良好的面向对象编程惯例。
若要定义这些方法,应使用 get
和 set
方法属性。首先应创建用于获取或设置属性值的方法,然后在方法名前面加上 get
或 set
关键字。
function get user():String { return userName; } function set user(name:String):Void { userName = name; }
获取方法不能有任何参数。而设置方法必须有一个必要参数。设置方法与同一范围内的获取方法可以具有相同的名称。但获取/设置方法的名称不能与其它属性的名称相同。例如,在上面的示例代码中,因为定义了名为 user
的获取/设置方法,所以在同一个类中就不能再有名称也为 user
的属性了。
与普通方法不同,调用获取/设置方法时,方法名后面不带任何括号或参量。例如,现在可以按照以下语法使用上面定义的获取/设置方法来访问或修改 userName
的值。
var name = obj.user; obj.user = "Jack";
注意:隐式获取/设置方法是对动作脚本 1 中 Object.addProperty()
方法的句法简化。