`
huoyanyanyi10
  • 浏览: 53242 次
  • 性别: Icon_minigender_1
  • 来自: 赤峰
社区版块
存档分类
最新评论

浅谈Flex唯一标识UID

    博客分类:
  • flex
阅读更多
UID作为Flex的唯一标识,很多对象中都拥有mx_internal_uid属性,先看看代码:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
minWidth="955" minHeight="600">
<s:layout>
<s:VerticalLayout />
</s:layout>
<fx:Script>
<![CDATA[
import mx.controls.Alert;
import mx.utils.ObjectUtil;
import mx.utils.UIDUtil;

private var _arr:Array = ["a", "b"];
private var _obj:Object = {"a": "b"};

private function infoA():void{
alert(_arr + "", "a,b");
}

private function infoB():void{
_arr.push(_obj);
alert(_arr[2], _obj)
}

private function infoC():void{
var u:Number = _arr.length - 1;
_arr.pop();
alert(_arr.length, u);
alert(1, 1.00);
}

private function infoD():void{
var _newArr:Array = _arr;
var _oldArr:Array = _arr;
_newArr.pop();
alert(_newArr, _oldArr);
alert(btn.stage, stage);
}

private function infoE():void{
alert(null, undefined);
}

private function infoF():void{
alert(ObjectUtil.clone(_arr), _arr);
}

private function infoG():void{
//alert(ObjectUtil.copy(_arr), _arr);
var _newArr:Object = ObjectUtil.copy(_arr);
alert(_newArr, _arr);
_arr.pop();
alert(_newArr, _arr);
alert(_newArr.length, _arr.length);
}

private function alert(oA:Object, oB:Object):void{
var _strA:String = UIDUtil.getUID(oA);
var _strB:String = UIDUtil.getUID(oB);
Alert.show(_strA + "\n" + _strB + "\n" + (_strA == _strB));
}
]]>
</fx:Script>
<s:Button label="方案A" click="infoA()" />
<s:Button label="方案B" click="infoB()" />
<s:Button label="方案C" click="infoC()" />
<s:Button label="方案D" click="infoD()" />
<s:Button label="方案E" click="infoE()" />
<s:Button label="方案F" click="infoF()" />
<s:Button id="btn" label="方案G" click="infoG()" />
</s:Application>






方案A中 结果返回true
_arr + ""和_arr.toString()从对比上讲是一个意思,因此两者的结果是相同的,明显的两个字符串的地址不一样,但通过判断返回true,说明两者的唯一标识相同。

方案B中 结果返回true
返回的结果说明 两个对象唯一标识相同 对象在数组中估计是引用而已。

方案C中 结果都是返回true
返回结果说明 数字类型的唯一标识是统一的,不管怎么变化,都是唯一的数字而已。

方案D中 结果返回true
引用相同,唯一标识相同。

方案E中 结果返回true
程序会将其强行转换为"null"字符串,那么其唯一标识就是"null"。

方案F中 如果首先选取这个方案,结果会先为false后为true,如果先前选择了以上方案,那么会直接为true
首先说明ObjectUtil.clone方法不会克隆没有唯一标志的对象,估计是在UIDUtil.getUID方法的时候为其装配了唯一标志,所以在第二次选取的时候,唯一标识就相同了。

方案G中 同方案F一样,需要第一次选取,其中有一段被注释掉了,取消注释则返回值为false true true false,如果注释代码则返回值为false false false
结果有点怪,估计是这样的,在取消注释时,_arr中是没有唯一标识的,从方案F可以大概证明,经过UIDUtil.getUID方法后,加入了唯一标识,因此在第二次拷贝时,由于唯一标识相同,而返回true,因为是对象拷贝,而且对象的唯一标识是相同的,但又因对象已经被分割成两个地址,所以最后判断为false;当注释代码后,由于其被拷贝的对象没有唯一标识,因而返回false,在ObjectUtil.copy之前对象唯一标识没有进行统一,所以第二次对比也为false,说明生成了不同的唯一标识,当然最后结果也为false。

总结:
1. 对象 + ""和对象.toString()的唯一标识是相同的。
2. 对象在被引用和引用中的唯一标识都是相同的。
3. 数字在任何地方的使用对其唯一标识都是相同的。(2和2.00相同)
4. null和undefined在唯一标识上都是"null"。
5. ObjectUtil.clone方法不会克隆没有唯一标识的对象。
6. UIDUtil.getUID会为对象自动装配唯一标识。
7. 对象在没有唯一标识的情况下被ObjectUtil.copy会生成两个不同的唯一标识对象。
8. 反之,对象在有唯一标识的情况下被ObjectUtil.copy生成的对象也有相同的唯一标识。


http://pizazz-ex.iteye.com/blog/808212


友情链接:珀莱雅  欧诗漫  专卖 http://store.taobao.com/shop/view_shop.htm?mytmenu=mdianpu&utkn=g,2djlrizuga4a1324992712104&user_number_id=372143050
分享到:
评论

相关推荐

    Flex唯一中文教程【PDF】

    本教程是Flex的唯一中文教程,对于想要学习和掌握Flex技术的中文用户来说,这是一个非常宝贵的资源。在本文中,我们将深入探讨Flex的关键概念、核心组件以及如何使用它来创建动态、交互性强的Web应用程序。 1. **...

    MyEclipse+Flex+Blzeds入门浅谈.doc

    ### MyEclipse+Flex+Blazeds 入门浅谈 #### 一、开发环境的搭建 在构建基于 MyEclipse、Flex 和 Blazeds 的开发环境时,我们需要准备以下工具: - **MyEclipse 6.5**:一款集成开发环境,用于 Java 应用程序开发。...

    深入浅出Flex,经典教程

    《深入浅出Flex》经典教程是一本专注于Adobe Flex技术的深度解析书籍,旨在帮助读者全面理解和掌握Flex在开发富互联网应用程序(RIA)中的应用。Flex是基于ActionScript和MXML的开源框架,它允许开发者创建交互性强...

    深入浅出flex中文教程

    本教程将深入浅出地探讨Flex的基本概念、核心技术和实际应用。 一、Flex概述 Flex是一种用于创建交互式、数据驱动的Web应用程序的技术,它允许开发者构建动态、响应式的用户界面,具有丰富的视觉效果和高效的性能。...

    flex4.5从浅入深第一、二章清晰版

    本书《flex4.5从浅入深》旨在帮助开发者深入理解Flex 4.5的各个方面,从基础知识到高级特性,逐步提升开发技能。标题表明本书分为两大部分,第一章节包含16节内容,第二章节则有5节,都提供了清晰易读的版本。 在...

    Flex Flex Flex Flex

    Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex Flex ...

    Flex万年历记事本_flex源码

    Flex是Adobe公司推出的一种基于ActionScript 3.0的开源框架,主要用于构建富互联网应用程序(Rich Internet Applications,简称RIA)。这种技术允许开发者创建具有高度交互性和动态视觉效果的Web应用,提供比传统...

    Flex相册 Flex图片

    Flex相册 Flex图片

    浅谈CSS3中display属性的Flex布局 - 三里屯柯南 - 博客园1

    在CSS3中,`display`属性的`flex`布局是一种强大的布局模式,旨在解决传统CSS布局方式在处理复杂和动态内容时的局限性。通过使用`display: flex`,我们可以轻松地创建响应式和灵活的网页布局。在本文中,我们将深入...

    flex学习笔记 flex学习总结 flex学习教程

    Flex是Adobe公司推出的一种用于构建富互联网应用程序(RIA)的技术,它基于ActionScript编程语言和Flex框架,可以创建交互性强、用户体验优秀的Web应用。本教程是作者精心编写的Flex学习资料,适合初学者入门,通过...

    Flex资料大全(Flex白皮书 Flex cookbok Flex编程指南 Flex设计模式等)

    本资料大全包含了多个重要的Flex学习资源,如Flex白皮书、Flex Cookbook以及Flex编程指南,这些都是深入理解Flex开发不可或缺的文献。 1. **Flex白皮书**: Flex白皮书是Adobe官方发布的技术文档,通常包含Flex...

    flex flex和 java交互

    Flex是Adobe公司开发的一种开放源代码的富互联网应用程序(RIA)框架,主要用于构建具有动态图形、交互性丰富的Web应用。Flex应用程序通常使用ActionScript编程语言,并基于Flash Player或Adobe AIR运行时环境。Java...

    flex全书籍 flex全书籍

    Flex全书籍涵盖了Adobe Flex这一开发框架的广泛知识,它是一个用于构建富互联网应用程序(RIA)的开源SDK。...无论是初学者还是有经验的开发者,这些书籍都提供了深入浅出的指导,帮助你充分利用Flex的优势。

    flex实战项目,flex开发

    Flex是Adobe公司推出的一种用于构建富互联网应用(RIA, Rich Internet Applications)的开源框架,它主要基于ActionScript编程语言和MXML标记语言。这个“Flex实战项目”可能是一个使用Flex技术构建的实际应用示例,...

    FLEX网站源码 FLEX网站源码 FLEX网站源码

    Flex是Adobe公司开发的一种富互联网应用(Rich Internet Application,RIA)框架,主要用于构建运行在浏览器上的交互式应用程序。Flex以其强大的MXML和ActionScript编程语言,以及基于Flash Player或Adobe AIR运行时...

    记事万年历flex源码

    【标题】"记事万年历flex源码"所涉及的知识点主要集中在Adobe Flex技术和日历应用程序开发上。Flex是一种基于ActionScript 3.0的开源框架,用于构建富互联网应用(RIA)。它允许开发者使用MXML和ActionScript来创建...

    flex_api (FLEX接口)

    Flex API 是一种软件开发接口,主要用于构建富互联网应用程序(Rich Internet Applications,简称RIA),它由Adobe公司开发,用于提供强大的图形和交互性功能。在本文中,我们将深入探讨Flex API的核心概念、主要...

    flex 官方文档 中文教程

    Flex是由Adobe公司开发的一种开放源码的富互联网应用程序(RIA)框架,主要用于构建和部署跨平台、跨浏览器的互动用户界面。本教程基于Flex官方文档,旨在为开发者提供中文版的详细学习指南,帮助理解并掌握Flex的...

    flex中文教程伴有flexbuilder

    Flex是Adobe公司开发的一种用于创建富互联网应用程序(RIA)的开放源代码框架,它主要基于ActionScript编程语言和MXML标记语言。这个“Flex中文教程”显然是为了帮助初学者掌握Flex开发技术,通过配合使用Flex...

Global site tag (gtag.js) - Google Analytics