【发布时间】:2011-01-11 08:23:02
【问题描述】:
是否可以检查一个类以查看它是否具有方法?甚至是特定的属性
【问题讨论】:
-
好吧,如果我只是做一个 if 语句来检查是否定义了属性工作。但是方法呢
标签: flash actionscript-3 actionscript flash-cs4
是否可以检查一个类以查看它是否具有方法?甚至是特定的属性
【问题讨论】:
标签: flash actionscript-3 actionscript flash-cs4
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)。
import flash.utils.describeType;
...
function methodExists(obj:Object,name:String):Boolean
{
var desc:XML=flash.utils.describeType(obj);
return (desc.method.(@name==name).length()>0);
}
(注意:在我的头顶上完成)
【讨论】:
describeType 不列出动态属性。例如,在这个对象上试一试:var target:Object = {a:123, b:"ASD", c:function():void{trace("hello");}} - 仅输出带有 hasOwnProperty、isPrototypeOf 和 propertyIsEnumerable 的普通对象的描述。
您还可以从数组/查找方法中调用方法/属性,如下所示。如果它不存在,它将是“未定义”,也算作“假”。
var target:Object;// = some object
if(target["propertyName"]){
// if property/method exists
}else{
// if property/method not exists
}
【讨论】:
if(target["propertyName"] == undefined) 可能会更好。否则,如果属性已定义但设置为计算结果为 false 的值(即 emtpy 字符串、null、0 或 false),它将被视为“不存在”。
undefined。此外,只有无类型变量var x:* 可以存储未定义的值。 Null 是 (==) 到未定义,但不是 (===) 到未定义,因此如果属性存在并且为 null,则与使用 == 的未定义进行比较将返回 true,尽管属性存在并持有 null 值。事实上,即使严格相等,一个属性也可以被定义并持有值“undefined”,这仍然与being undefined(即运行一个for ( var key:* in obj) 循环仍将返回该属性)。因此,只有if(key in obj) 是正确的。