新しいVOが作成されたときに同じようにそのデフォルト値は、直接更新することができますので、私は、それがインスタンス化されるときにオブジェクトを受け取ることができる値オブジェクトを使用しています:TRY/CATCHがデフォルトのプロパティ値を上書きするのはなぜですか?
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
方法はを使用していますコンストラクタに渡されたオブジェクト(あるいは、少なくとも、それは意図だろう)で唯一の既存のプロパティを取得するために/キャッチにブロックを試してみてください。
private function parseSettings(obj:Object):void
{
try
{
this.globalPosition = obj.globalPosition;
this.chipStackOffset = obj.chipStackOffset;
this.dealerChipOffset = obj.dealerChipOffset;
}
catch (error:Error)
{
}
}
を今、このシナリオを考えてみます。新しい値オブジェクトをする必要があります創造されるが、3つのプロペrties定義:
new SeatSettingsVO({globalPosition:new Point(300, 277)})
問題は、obj
が特定のプロパティが含まれていない場合(例えばchipStackOffset
)は、初期プロパティ値(Point(0,0))を維持する代わりに、null
に上書きします。
私の推測では、Objectクラスインスタンス上に存在しないプロパティにアクセスしてもエラーは発生しませんが、null
が返され、デフォルト値が上書きされます。誰もこの行動を説明でき、おそらく解決策を提案できますか?
ありがとうございました。
*私の推測では、Objectクラスインスタンス上に存在しないプロパティにアクセスすると、エラーは発生せず、むしろnullが返されます。*正しいです。プロパティが存在するかどうかを確認する(@ Sam DeHaanが言ったように)方法があります。 – NemoStein
@NemoStein nullを返しませんが、 'undefined'を返します –
@BrianGenisio、+1。あなたは完全に正しいです。 "定義されていません"は "空"ではありません。 'null'と' undefined'ははるかに異なっています。それを指摘してくれてありがとう。 – NemoStein