public static Delegate Combine(Delegate a, Delegate b)
{
if (a == null)
return b;
else if (b == null)
return a;
else if (a.As<JsObject>().member("all"))
return ((MulticastDelegate)a).Add(b);
else
return new MulticastDelegate(a.Target, new[] { a, b });
}