Thanks for help guys!

JesterXL wrote:

Sorry, missed 1 of the traces:

// notice the array is on the prototype,
// thus all class instances point to it
foo.prototype_array.push("foo_d");
trace(foo.prototype_array);
trace(bar.prototype_array);

should be:

// notice the array is on the prototype,
// thus all class instances point to it
foo.prototype_array.push("foo_d");
trace(foo.prototype_array); // b, foo_d
trace(bar.prototype_array); // b, foo_d

----- Original Message ----- From: "JesterXL" <[EMAIL PROTECTED]>
To: "Flashcoders mailing list" <flashcoders@chattyfig.figleaf.com>
Sent: Thursday, December 29, 2005 3:39 PM
Subject: Re: [Flashcoders] Flash Class Array bug - Please verify


Nope, they are prototype scoped arrays, not static.

AS1:
function MyClass(){}

AS2:
class MyClass{}

AS1 - static:
MyClass.my_array = [];

AS2 - static:
class MyClass
{
   static var my_array:Array = [];
}

AS1 - prototype:
MyClass.protoytpe.my_array = [];

AS2 - prototype:
Same as above, or:
class MyClass
{
   var my_array:Array = [];
}

Prototype values, even in the class intstance, point to the prototype value
when read, but as soon as an instance modifies this value, it makes it's own
copy if it's a primitive (String, Number).  If it's an Object, it still
points to the prototype reference.  Example:

// The Class
class MyClass
{
static var static_array:Array = ["a"];
var prototype_array:Array = ["b"];
var instance_array:Array;

var prototype_name:String = "MyClassName";

function MyClass()
{
 instance_array = ["c"];
}
}

// And here, the usages:

import MyClass;

trace(MyClass.static_array); // a
trace(MyClass.prototype.prototype_array); // b
trace(MyClass.prototype.instance_array); // undefined

var foo:MyClass = new MyClass();
trace(foo.prototype_array); // b
trace(foo.instance_array); // c

var bar:MyClass = new MyClass();
trace(bar.prototype_array); // b
trace(bar.instance_array); // c

// notice the array is on the prototype,
// thus all class instances point to it
foo.prototype_array.push("foo_d");
trace(foo.prototype_array);
trace(bar.prototype_array);

// however, for primitives, instances
// will get their own copy once they
// change it

// before
trace(foo.prototype_name); // MyClassName
trace(bar.prototype_name); // MyClassName
foo.prototype_name = "MegaFoo";
// after
trace(foo.prototype_name); // MegaFoo
trace(bar.prototype_name); // MyClassName



----- Original Message ----- From: "Judah Frangipane" <[EMAIL PROTECTED]>
To: "Flashcoders mailing list" <flashcoders@chattyfig.figleaf.com>
Sent: Thursday, December 29, 2005 3:30 PM
Subject: [Flashcoders] Flash Class Array bug - Please verify


It seems like Flash is creating static members out of public arrays that
are initialized in the class declaration. Can someone confirm this? Is
this not legal, is it implied behavior or a bug?

// create a class called myClass
class myClass {
   // initialize the array in the declarations
   var myArray:Array = new Array();

   function myClass {
      trace("myArray.length="+myArray.length)
   }

   function addToArray() {
      myArray.push(10)
      myArray.push(20)
   }

}


// on the actions frame
import myClass

var a = new myClass();
a.addToArray();
a.addToArray();
a.addToArray();
var b = new myClass();

// trace outputs
myArray.length=0
myArray.length=3

Judah
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders
_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders




_______________________________________________
Flashcoders mailing list
Flashcoders@chattyfig.figleaf.com
http://chattyfig.figleaf.com/mailman/listinfo/flashcoders

Reply via email to