Jelajahi Sumber

added isObject

Nicolas Cannasse 19 tahun lalu
induk
melakukan
8c39639879
1 mengubah file dengan 35 tambahan dan 3 penghapusan
  1. 35 3
      std/Reflect.hx

+ 35 - 3
std/Reflect.hx

@@ -221,11 +221,11 @@ class Reflect {
 	public static function isFunction( f : Dynamic ) : Bool {
 		return untyped
 		#if flash9
-			f.call == __global__["Function"].prototype.call
+			try f.call == __global__["Function"].prototype.call catch( e : Dynamic ) false
 		#else flash
-			f["call"] == _global["Function"]["call"] && f.__name__ == null && f.__ename__ == null
+			f["call"] == _global["Function"]["call"] && f.__name__ == null
 		#else js
-			f != null && f.call == isFunction.call && f.__name__ == null && f.__ename__ == null
+			f != null && f.call == isFunction.call && f.__name__ == null
 		#else neko
 			__dollar__typeof(f) == __dollar__tfunction
 		#else error
@@ -233,6 +233,38 @@ class Reflect {
 			;
 	}
 
+	/**
+		Tells if a value is an object or not.
+
+	**/
+	public static function isObject( v : Dynamic ) : Bool untyped {
+		#if neko
+		return __dollar__typeof(v) == __dollar__tobject && v.__enum__ == null;
+		#else flash9
+		if( v == null )
+			return false;
+		var t = __typeof__(v);
+		if( t == "object" ) {
+			try {
+				if( v.__enum__ == true )
+					return false;
+			} catch( e : Dynamic ) {
+			}
+			return true;
+		}
+		return (t == "string");
+		#else flash
+		var t = __typeof__(v);
+		return (t == "string" || (t == "object" && !v.__enum__) || (t == "function" && v.__name__ != null));
+		#else js
+		if( v == null )
+			return false;
+		var t = __js__("typeof(v)");
+		return (t == "string" || (t == "object" && !v.__enum__) || (t == "function" && v.__name__ != null));
+		#else error
+		#end
+	}
+
 	/**
 		Delete an object field.
 	**/