能否检查一个类是否具有某个方法或特定属性?
能否检查一个类是否具有某个方法或特定属性?
var target:Object;// = some object
var name:String;// = some name
if(name in target){
// if property/method exists
}else{
// if property/method not exists
}
var obj:Object = {a:undefined};
将对obj["a"] === undefined
返回true,但是属性“a”仍然被定义,如下循环跟踪“a”所示:for (var key:* in obj) trace(key); //traces "a"
。要摆脱该属性,您必须调用delete obj["a"]
。要严格查找非空函数,最好使用if(target[name] is Function)
。 - Triynko你也可以通过数组/查找方法调用方法/属性,如下所示。如果不存在,它将是“未定义的”,这也算作“假”。
var target:Object;// = some object
if(target["propertyName"]){
// if property/method exists
}else{
// if property/method not exists
}
if(target["propertyName"] == undefined)
。否则,如果属性被定义但设置为某些评估为 false
的内容(即空字符串、null
、0
或false
),它将被视为“不存在”。 - IQAndreasundefined
时,必须使用严格相等运算符(===)。只有未声明类型的变量var x:*
可以存储值为undefined
的变量。null
与undefined
之间可以使用相等运算符(==)进行比较,但不能使用严格相等运算符(===),因此如果属性存在且为null
,则使用==
与undefined
进行比较将返回true
,尽管该属性存在并保存了null
值。实际上,即使使用严格相等性,属性也可以被定义并保存值“undefined”,这仍然不同于未定义(例如,运行for(var key:* in obj)
循环仍将返回该属性)。因此,只有if(key in obj)
是正确的。 - Triynkoimport flash.utils.describeType;
...
function methodExists(obj:Object,name:String):Boolean
{
var desc:XML=flash.utils.describeType(obj);
return (desc.method.(@name==name).length()>0);
}
(Note: done off the top of my head)
describeType
不列出动态属性。例如,尝试在此对象上使用:var target:Object = {a:123, b:"ASD", c:function():void{trace("hello");}}
- 输出一个普通对象的描述,只包含hasOwnProperty
,isPrototypeOf
和propertyIsEnumerable
。 - Amarghosh