作业帮 > 语文 > 作业

AS3.0中:定义的对象名只是真正对象的一个引用.这句话的含义是什么?

来源:学生作业帮 编辑:搜狗做题网作业帮 分类:语文作业 时间:2024/05/02 03:37:40
AS3.0中:定义的对象名只是真正对象的一个引用.这句话的含义是什么?
var myobj1 :object=(a:123,b:456);
var myobj2 :object;
myobj2=myobj1;
myobj2.a++;
trace("myobj1.a=",myobj1.a,"myobj2.a=",myobj2.a);
输出结果是:myobj1.a=124 myobj2.a=124
为什么myobj1的值不是123呢?跟上面的句子有什么关系?
AS3.0中:定义的对象名只是真正对象的一个引用.这句话的含义是什么?
我来回答这个问题吧,这就涉及到对象的引用问题了,什么是引用?其实在AS3.0中,一切皆引用,只是对象在内存中的存在方式不一样,决定了是值引用还是对象引用的关系,一般来说,基本数据类型比如数字,字符布尔值之类的,都是值引用,值引用的最大特点是不可变的,就是固定值,如果想变化,就得重新创建一个值,而所有相同值都是引用同一个对象.比如var a:uint=5;那么就是先在内存中创建一个5的对象,现在我们这样操作a++;那么现在计算机就又要重新创建了一个对象6用于a的引用.那么这个5如何了呢,如果这个5没有其它对象引用它的话,就符合垃圾回收机制,会自动清除掉的.这是简单数据类型的处理方式,那么复杂数据类型的处理方式就与此不同,复杂数据类型在内存中,不是固定不变的值,它是可变的,因此凡是引用这个复杂数据类型的对象,殾对这个内存中的对象具有可操作性,也就是说,如果两个对象同时指向内存中的同一个对象,那么其中如果有一个修改值,都会影响所有指向它的对象的值,以上的例子就是一个.在var myobj1中,它指向了内存中的{a:123,b :456}现在又有myobj2同样也指向了这个对象,因为是同时指向了一个对象,现在对myobj2进行操作,其实是对内存中的对象{a:123,b:456}进行了操作.自然内存中的对象的值发生了改变,现在内存中的对象值变成了{a:124,b:456}那么因为myobj1指向这个对象,自然myobj1也变成了{a:123,b:456};这是编程中很重要的基础知识,如果这方面你搞不明白,那么将来你要提高编程水平会有很大障碍.希望我的解释对你有用,这也是我的理解.祝你成功.
再补充一下:
var a:uint=5;
var b:uint=a;
b++;
trace(a);
//输出5,因为数字在内存中是常量,为固定值,所以改变b的值是不会改变a的值的.b引用了在内存中新创建的6,而5因为有a在引用,所以内存中现在存在了两个数字对象5和6.现在我们再创建一个对象
var c:uint=5;
这个时候内存中并没新增加一个对象5而是直接引用了原来的5,现在我们来测试一下
trace(a===c);//输出true;
trace(a==c);//输出true;说明内存中并没有新的对象生成.这是基本数据类型在内存中的特点.
其实对引用这个东西,够写一章了,在这里只能写这么多,要是你有不懂的地方,我们可以交流,总之这部分很重要.
再问: 谢谢你的回答,很感谢。 基本数据类型: var a:int=123; 这句的意思是: 1 。先内存中创建a容器然后给a容器赋123值 2 。 a指向内存中的123 1对还是2对? 复杂数据类型: var myobj1 :object={a:123,b:456}; 这句的意思是: 1。内存中先创建对象值{a:123,b:456}后, myobj1 指向对象值 2。先创建对象myobj,然后给它赋{a:123,b:456}对象值 在这里1对还是2对? 今后还会有疑惑想向您请教,能告诉我您的联系方式吗?
再答: 所有赋值都是指向,其实创建变量也是一个创建对象的过程,对象之间的联系就是一种指向的关系.说白了,就是一个对象指向另外一个对象.这就是引用.你可以查找我的联系方式加我.
再问: 以mybox.getChildByName("circle")的方式可以访问circle对象,为什么root.myBox的形式访问不了下层myBox对象呢?
再答: 你是不是感觉一个问题就要解答你所有的问题呢?
再问: 因为没有分数、无法提问。。所以。。。。。。。
再答: mybox.getChildByName("circle")这个返回的是一个Class对象,不是实例,而root.myBox则是指向一个实例对象,不是一回事。