他の一部の言語では、次のような存在アクセサー演算子を使用します?.
( CoffeeScriptを参照) 。
パフォーマンスについてあまり心配していない場合は、次のようにすることができます。
function notNull(object:*, properties:String):Boolean
{
if (object == null) return false;
var props:Array = properties.split(".")
for(var i:uint = 0; i < props.length; i++)
{
if(object[props[i]] == null) return false;
object = object[props[i]]
}
return true;
}
そして、それを次のように使用します。notNull(order, "reference.quote");
しかし、それはあまりきれいではありませんが、おそらく魔法で少しきれいにすることができます.Proxy
たとえば、次のコードを考えてみましょう。
import flash.utils.Proxy;
import flash.utils.flash_proxy;
dynamic class Existential extends Proxy {
private var _object:*;
public function Existential(object:*) {
_object = object;
}
flash_proxy override function getProperty(name:*):* {
var object:* = _object;
if (object == null) return null;
var props:Array = name.toString().split("$");
for(var i:uint = 0; i < props.length; i++)
{
if(object[props[i]] == null) return null;
object = object[props[i]]
}
return object;
}
}
その後、それを使用して他のオブジェクトをラップし、その場しのぎの存在ゲッターとして$
ではなく、それらを使用してそれらにアクセスできます。.
obj = {};
eObj = new Existential(obj);
eObj.what$is$this // null
obj = { what: { "is": { "this": 1 } } } ;
eObj = new Existential(obj);
eObj.what$is$this // 1
しかし、パフォーマンスはひどいものになると思います。パフォーマンスが重要な製品コードには使用したくありません。しかし、それはあなたにいくつかのアイデアを与えるかもしれません。