我正在使用一个值对象,它可以在实例化时接收对象,因此可以在创建新 VO 时直接更新其默认值,如下所示:
public class SeatSettingsVO
{
public var globalPosition:Point = new Point(0, 0);
public var dealerChipOffset:Point = new Point(0, 0);
public var chipStackOffset:Point = new Point(0, 0);
public function SeatSettingsVO(obj:Object = null)
{
if (obj)
parseSettings(obj);
}
}
该parseSettings
方法使用try/catch块来仅获取传递给构造函数的对象中的现有属性(或者至少,这是意图):
private function parseSettings(obj:Object):void
{
try
{
this.globalPosition = obj.globalPosition;
this.chipStackOffset = obj.chipStackOffset;
this.dealerChipOffset = obj.dealerChipOffset;
}
catch (error:Error)
{
}
}
现在考虑这种情况:需要创建一个新的值对象,但只定义了三个属性之一:
new SeatSettingsVO({globalPosition:new Point(300, 277)})
问题在于,如果obj
不包含特定属性(例如chipStackOffset
),则该方法不会保持初始属性值(Point(0,0)),而是将其覆盖为null
。
我的猜测是,访问 Object 类实例上不存在的属性不会触发错误,而是null
会返回,这反过来会导致默认值被覆盖。谁能解释这种行为,并可能提出解决方案?
非常感谢。