gpt4 book ai didi

actionscript-3 - 为什么 TRY/CATCH 会覆盖默认属性值?

转载 作者:行者123 更新时间:2023-12-03 01:28:52 25 4
gpt4 key购买 nike

我使用的是一个值对象,它可以在实例化时接收一个对象,因此它的默认值可以在创建新的 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 block ,以便仅获取传递给构造函数的对象中的现有属性(或者至少,这将是意图):

    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,这反过来会导致默认值被覆盖。任何人都可以解释这种行为,并可能提出解决方案吗?

非常感谢。

最佳答案

比其他解决方案稍微简洁一些:

this.globalPosition = obj.globalPosition || DEFAULT_GLOBAL_POSITION;

就像 Python 中一样,||如果第一个操作数的计算结果为 0、null、false、NaN、""或 undefined 以外的值,则运算符返回该操作数。否则,它按原样返回第二个操作数:

trace(new Point(3, 3) || "hi"); //(x=3, y=3)
trace(false || "hi"); //hi
trace("hi" || "bye"); //hi
trace(0 || null); //null
trace(NaN || 0); //0
trace("" || undefined); //undefined
trace(undefined || new Point(0.4, 0)); //(x=0.4, y=0)
trace(null || false); //false

因此,您可以使用它来检查是否已定义某个值,如果已定义,则使用该值,如果未定义,则使用默认值。老实说,我不确定它是否会使您的代码更具可读性,但它是一种选择。

关于actionscript-3 - 为什么 TRY/CATCH 会覆盖默认属性值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10433464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com