Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 检查类是否有方法_Flash_Actionscript 3_Actionscript_Flash Cs4 - Fatal编程技术网

Flash 检查类是否有方法

Flash 检查类是否有方法,flash,actionscript-3,actionscript,flash-cs4,Flash,Actionscript 3,Actionscript,Flash Cs4,是否可以检查一个类以查看它是否有方法?甚至是一个特定的财产 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); } (注意:从头开始就完成了)您

是否可以检查一个类以查看它是否有方法?甚至是一个特定的财产

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);
}

(注意:从头开始就完成了)

您还可以从数组/查找方法调用方法/属性,如下所示。如果它不存在,它将是“未定义”的,也将被视为“false”

var target:Object;// = some object

if(target["propertyName"]){
    // if property/method exists
}else{
    // if property/method not exists
}

看起来,如果我只做一个if语句,检查属性是否定义有效。但是methodsRelated呢:
describeType
不列出动态属性。在这个对象上尝试它,例如:
var-target:object={a:123,b:“ASD”,c:function():void{trace(“hello”);}
-输出一个普通对象的描述,只需
hasOwnProperty
isPrototypeOf
propertyEnumerable
。不需要使用非常慢的“descripeType”。descripeType可能很慢,但是,如果创建一个方法将XML处理为面向对象的结构,并按类型名称将其缓存在字典中,则只会在第一次运行任何给定类型时产生describeType的开销,然后按类型名称进行简单的字典缓存查找会非常快(getQualifiedClassName(实例或类)大约快3000倍)。describeType唯一的缺点是它不捕获动态属性,但这是经过设计的。+1但请注意,这不会列出对象的私有/受保护属性/函数。是的,如果它是私有或受保护的,我可能不需要它。感谢这是关于属性/方法是否真的存在(即它是可枚举的)的唯一正确答案,因为即使持有“未定义”值,也可以定义属性,即使具有严格的相等性。例如:
varobj:Object={a:undefined}obj[“a”]==undefined
,code>将跟踪true,但属性“a”仍然被定义,如下循环跟踪“a”所示:
对于(var key:*在obj中)跟踪(key)//跟踪“a”
。要删除该属性,必须调用
delete obj[“a”]
。要严格查找非空函数,
if(target[name]是函数)
最好。最好实际检查未定义的
if(target[“propertyName”]==undefined)
。否则,如果该属性被定义但设置为计算结果为
false
(即emtpy字符串、
null
0
、或
false
)的值,则该属性将被视为“不存在”。如果我尝试在函数上使用该属性,它将在我身上崩溃,并出现错误1069-即使只是检查它是真的还是假的。我是用关键字this来做的(用于句法研究)。为什么?必须使用严格相等(==)来比较
未定义的
。此外,只有非类型化变量
var x::
可以存储未定义的值。Null(==)表示未定义,而不是(==)表示未定义,因此,如果属性存在且为Null,则与未定义相比,使用==将返回true,尽管属性存在且持有Null值。事实上,即使使用严格相等,也可以定义属性并保存值“undefined”,这与未定义的值仍然不同(即运行for(var key:*In obj)循环仍将返回该属性)。因此,只有在(输入obj)
正确时才使用
var target:Object;// = some object

if(target["propertyName"]){
    // if property/method exists
}else{
    // if property/method not exists
}