类似于as3中的指针的概念?

时间:2012-01-24 06:43:24

标签: actionscript-3 oop pointers reference

是否存在指针或类似于as3的概念?

我使用了

的概念
var mc1:MovieClip;
var mc2:MovieClip();
var mcCommon:MovieClip = new MovieClip();
mcCommon["myptr"] = mc1;
mcCommon["myptr"] = mc2;

我将在哪里阅读并了解有关此概念的更多信息。我想得到简单的答案,因为我不是as3的专家。我还在学习。

3 个答案:

答案 0 :(得分:8)

我没有用一段时间专门使用指针的语言进行编码,我不确定这正是你所要求的,但这里是试图回答你的问题:

在AS3中,对象的变量引用总是指针,但基本类型(字符串,数字,整数和布尔值)除外,它们总是仅按值。

因此,对于基本类型,您会得到“按值”行为:

var a:String = "hello";
var b:String = a;  // b is a new String, a clone of a
b += " world";
trace(a);  // hello
trace(b);  // hello world

对b的修改没有修改变量。或者也许可以说a和b是在第2行之后引用相同的String,但是+ =运算符创建了一个新的String并将其分配给b。如果查看String documentation,请注意,没有任何成员函数实际修改String就地,它们都会返回新的字符串。

使用简单的非指针参数进行函数调用时会看到相同的行为:

function wont_modify(word:String):String
{
  word += " world";
  return word;
}
var a:String = "hello";
trace(wont_modify(a));  // hello world
trace(a); // hello

但是,对于非简单类型,访问是通过引用(在其他语言中称为指针):

var a:Array = [1, 2, 3];
var b:Array = a;  // b is now a reference to a
b.push(4);
trace(a);  // [1, 2, 3, 4]
trace(b);  // [1, 2, 3, 4]

如果你想要一个像String这样的简单类型的“指针式”行为,它必须是类似指针的Object的成员,你可以为它传递一个引用:

function will_modify(obj:Object):void
{
  obj.a += " world";
}
var obj:Object = { a:"hello" }
will_modify(obj);
trace(obj.a);  // hello world

字符串和数字实际上确实扩展了Object,但是所有的运算符和函数调用都是按值而不是按引用来处理它们。

答案 1 :(得分:2)

如果您具体询问代码,首先它应该如下所示:

var mc1:MovieClip;
var mc2:MovieClip;
var mcCommon:MovieClip = new MovieClip();
mcCommon["myptr"] = mc1;
mcCommon["myptr"] = mc2;

虽然mc1和mc2实际上都是null。

语法mcCommon [“myptr”]表示您在MovieClip mcCommon上创建名为“myptr”的属性。因此,您可以稍后使用mcCommon [“myptr”]检索此属性的内容。最后一行实际上覆盖了属性的内容(如果它当然不是null)。你可以这样做,因为MovieClip类是动态的。在其他(非动态)实例上,您无法创建此类属性。

答案 2 :(得分:1)

虽然不是一回事,但我认为你要找的是Dictionary,其中集合中的每个属性都有String作为密钥,可以通过它访问。