Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 软件时空 > 工具软件 > "EAS2边学边练" 之一 类方法 checkType( )
【标  题】:"EAS2边学边练" 之一 类方法 checkType( )
【关键字】:c,方法,AS,EA,Type,EAS,EAS2,checkType
【来  源】:网络

"EAS2边学边练" 之一 类方法 checkType( )

Your Ad Here

在进入正题前,先来回顾一下typof():

typeof(expression)

可用性
Flash Player 5。

参数
expression 一个字符串、影片剪辑、按钮、对象或函数。

输出
参数 输出

布尔值 boolean
数字 number
字符串 string
函数 function
影片剪辑 movieclip
按钮 object
文本字段 object
对象 object

以下是使用 typeof( ) 以及Toolkit.builtInOf( ) 测试版的试验结果,只为说明几个问题:

// 布尔值
var test:Boolean = false;
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is boolean
My God! It is not a built-in datatype!
// 布尔对象
var test:Boolean = new Boolean("true");
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is object
This is a instace of Boolean

// 数字值
var test:Number = 5;
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is number
My God! It is not a built-in datatype!
// 数字对象
var test:Number = new Number(5);
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is object
This is a instace of Number

// 字符串值
var test:String = "haha";
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is string
My God! It is not a built-in datatype!
// 字符串对象
var test:String = new String("haha");
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is object
This is a instace of String

//函数
function test() {
// Nothing to do
}
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is function
This is a instace of Function

// 影片剪辑1
// test 是舞台上一矩形影片剪辑的实例名
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is movieclip
This is a instace of MovieClip
// 影片剪辑2
var test:MovieClip = _root.createEmptyMovieClip("tt", 10);
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is movieclip
This is a instace of MovieClip

// 按钮
// test是舞台上一矩形按钮的实例名
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is object
This is a instace of Button

// 文本1
// test 是舞台上一个输入文本框的实例名
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is object
This is a instace of TextField
// 文本2
// test 是舞台上一个动态文本框的实例名
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is object
This is a instace of TextField
// 文本3
// test 是用MovieClip.createTextField() 创建的动态文本的实例名
// 注意:MovieClip.createTextField() 是无返回值的
_root.createTextField("test", 1, 100, 100, 300, 100);
test.border = true;
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is object
This is a instace of TextField

// 对象1--Array对象
var test:Array = [0, 1, 2];
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is object
This is a instace of Array
// 对象2--Date对象
var test:Date = new Date();
trace("typeof is " + typeof test);
Toolkit.builtInOf(test);
输出:
typeof is object
This is a instace of Date
// 对于其他对象的测试,请读者看完本文后自行测试! 这些例子足以说明问题了!

结论:
boolean、number、string(首字母均为小写,若大写就是对象)是语言本身的数据类型,而非对象。
然而各种对象Object是OOP的基础,typeof只能判断出是object(Object类是所有类的超类),
其中函数和影片剪辑是较为特殊的两个,typeof可以判断其类型,同时它们又是对象。
对于其他对象若想判断具体类别就要靠checkType( )了。

源码如下:


//
//:WHY:
// 不断丰富自定义静态方法
//
// :WHAT:
// 200501300304 checkType(varName:Object):Void
// 类型:调试类方法,当然不排除日后用于程序中的可能
// 功能:全面检测变量所属的数据类型(包括自定义类),并将判断结果显示在输出窗口中
// 参数:单一变量
// 返回值:无
//
class Toolkit {
public static function checkType(varName:Object):Void {
var typeResult:String = typeof (varName);
var classResult:String = "Not any Object instance.";
// 逐个类型能检查
switch (typeResult) {
case "boolean" :
break;
case "number" :
break;
case "string" :
break;
case "function" :
// 特殊情况,特殊处理
classResult = "Function";
break;
case "movieclip" :
// 特殊情况,特殊处理
classResult = "MovieClip";
break;
case "object" :
// 进一步判断实例所属的类
classResult = quickCheckClass(varName);
break;
default :
// undefined, null
}
trace(" typeof: " + typeResult + "\nbuiltInOf: " + classResult + "\n");
}
//:WORKING:
// 快速检查给定对象所属类(包括自定义类)的名称
private static function quickCheckClass(instanceName:Object):String {
_global.ASSetPropFlags(_global, null, 6, 1);
for (var className in _global) {
if (instanceName instanceof eval(className)) {
return className;
}
}
}
//:RETIRE:
// 检查给定对象是否属于在 givenClass 所列出的类
private static function checkGivenClass(instanceName:Object):String {
// 70个内建类名称
var givenClass:Array = new Array("XMLUI", "CustomActions", "MMSave", "Cookie", "TextSnapshot", "PrintJob", "MovieClipLoader", "URIError", "TypeError", "SyntaxError", "ReferenceError", "EvalError", "System", "Accessibility", "Video", "Stage", "TextFormat", "TextField", "Button", "Key", "Mouse", "Selection", "LoadVars", "XML", "XMLNode", "Sound", "Math", "Array", "String", "Date", "Boolean", "Number", "o", "profile", "clearInterval", "setInterval", "isFinite", "isNaN", "updateAfterEvent", "trace", "parseFloat", "parseInt", "unescape", "escape", "ASSetNative", "ASSetPropFlags", "AsSetupError", "Error", "ContextMenu", "ContextMenuItem", "LocalConnection", "SharedObject", "Microphone", "Camera", "NetStream", "NetConnection", "Color", "AsBroadcaster", "XMLSocket", "MovieClip", "Infinity", "NaN", "Function", "FWEndCommand", "MMEndCommand", "FWJavascript", "MMExecute", "ASconstructor", "ASnative", "Object");
var numLoop:Number = givenClass.length;
for (var i = 0; i < numLoop; i++) {
if (instanceName instanceof eval(givenClass[i])) {
return givenClass[i];
}
}
}
}

前面的分析已经足够了,这个方法的逻辑结构也很简单(如果你学过一些编程知识的话),但俺保证要比typeof( ) 好用多了!

源文件下载(已修订):
点击浏览该文件

会用的自己搞定就行了!
不会用的,下载后解压缩,将Toolkit.as放入以下目录:
Macromedia\Flash MX 2004\zh_cn\First Run\Classes
或者 Macromedia\Flash MX 2004\en\First Run\Classes
然后重启Flash MX 2004或Flash MX Professional 2004即可测试、使用。 以下是正式版的测试用例及其结果

// test use-case
var test0:Boolean = false;
var test1:Boolean = new Boolean("true");
var test2:Number = 5;
var test3:Number = new Number(5);
var test4:String = "haha";
var test5:String = new String("haha");
function test6() {
//Nothing to do
}
var test7:MovieClip = _root.createEmptyMovieClip("tt", 10);
_root.createTextField("test8", 11, 100, 100, 300, 100);
test8.border = true;
var test9:Array = [0, 1, 2];
var test10:Date = new Date();
//自定义类
var test11:Box = new Box();
// output test result
for (var i = 0; i <= 11; i++) {
trace("Test" + i);
Toolkit.checkType(this["test" + i]);
}

输出:

Test0
typeof: boolean
builtInOf: Not any Object instance.
Test1
typeof: object
builtInOf: Boolean
Test2
typeof: number
builtInOf: Not any Object instance.
Test3
typeof: object
builtInOf: Number
Test4
typeof: string
builtInOf: Not any Object instance.
Test5
typeof: object
builtInOf: String
Test6
typeof: function
builtInOf: Function
Test7
typeof: movieclip
builtInOf: MovieClip
Test8
typeof: object
builtInOf: TextField
Test9
typeof: object
builtInOf: Array
Test10
typeof: object
builtInOf: Date
Test11
typeof: object
builtInOf: Box
如何突破Class中的范围限制:【上一篇】
mx.utils 包 [2] 之 Delegate类 应用:【下一篇】
【相关文章】
  • FLASH可以对数据进行保存
  • AS制作点不到的按钮
  • 利用flash判断你的e-mail合法性
  • for循环使用详解(c语言版)
  • Flash 实用编程百例解读
  • 实例学用Flash MX增强的AS功能
  • 用flash动作脚本动态创建和控制文本框
  • Flash MX的AS绘图和时间控制
  • AS计算方面的错误
  • 揭开AS脚本中区分大小写之迷
  • 【随机文章】
  • ubuntu服务器入门
  • 广州北大青鸟湘计立德中心2007年IT企业定向培养就业班招生公告
  • C++历史上最重要的图书
  • template_2
  • 用php做一个简单的表单
  • 注册表中的禁用项
  • 第二代的Linux发行版
  • 矩形点的排序问题。
  • 将位图旋转90度
  • 简要介绍Java的类加载机制
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 bbb软讯网络 All Rigths Reserved.