-
StackOverflow 文档
-
ActionScript 3 教程
-
使用代理类
-
用法
package
{
import flash.display.Sprite;
/**
* Daemonette of Slaanesh.
*
* It is minor female demon, vaguely human-like, but with crab-like pincers instead of hands.
* She wears a rather indecent skimpy leather bikini, moves quickly and casts deadly spells!
*/
public class Slaanesh extends Sprite
{
public function Slaanesh()
{
// Lets initialize the PyArray.
var PA:PyArray = new PyArray(1,2,3,4,5,4,3,2,1,"Foo");
// Basic check: get the last element.
trace(PA[-1]);
// output:
// Foo
// This will map to the 0-based third element.
trace(PA[2.0]);
// output:
// 3
// This should not get us anywhere.
trace(PA[2.1]);
// output:
// [PyArray] is unable to resolve property "2.1".
// null
// This should return the length of the data Array.
trace(PA["length"]);
// output:
// 10
// This should return the length of the data Array.
// This will not compile unless PyArray class is marked "dynamic".
trace(PA.length);
// output:
// 10
// This will map to indexOf method of data Array via getProperty method.
trace(PA["indexOf"]);
// output:
// function Function() {}
// This will map to indexOf method of data Array via getProperty method.
// This will not compile unless PyArray class is marked "dynamic".
trace(PA.indexOf);
// output:
// function Function() {}
// This is a try to access a non-existent property.
// This will not compile unless PyArray class is marked "dynamic".
trace(PA.P124);
// output:
// [PyArray] is unable to resolve property "P124".
// null
// This is a try to call a non-existent method via callProperty method.
// This will not compile unless PyArray class is marked "dynamic".
trace(PA.P124());
// output:
// [PyArray] is unable to resolve method "P124".
// null
// Basic check: calling a proxied method via callProperty method.
trace(PA.indexOf(5));
// output:
// 4
// An attempt to replace an Array method with a random value.
// This will not compile unless PyArray class is marked "dynamic".
PA.indexOf = 123;
// output:
// [PyArray] is unable to set property "indexOf".
// An attempt to assign a random value to a random property.
// It will succees because Array, as a dynamic class, allows so.
// This will not compile unless PyArray class is marked "dynamic".
PA.indexOfz = 123;
trace(PA.indexOfz);
// output:
// 123
// An attempt to assign an Array element via negative indexing.
// This trace works fine because toString method is also proxied.
PA[-3] = "Hello";
trace(PA);
// output:
// 1,2,3,4,5,4,3,Hello,1,Foo
// An attempt to delete Array elements via normal and negative indexing.
// This operation is mapped via deleteProperty method.
delete PA[-4]; // deletes "3" before "Hello"
delete PA[0]; // deletes "1" at the start.
trace(PA);
// output:
// 2,3,4,5,4,Hello,1,Foo
// An attempt to delete a non-dynamic method reference.
// There's no error output, AS3 must be handling this internally.
delete PA.indexOf;
trace(PA.indexOf);
// output:
// function Function() {}
// An attempt to set an element out of index range.
PA[10] = "123abc";
trace(PA);
// output:
// 2,3,4,5,4,Hello,1,Foo,,,123abc
var aText:String;
// This is a test of for..in loop, Array elements are
// enumerated via nextName and nextNameIndex methods.
aText = ""
for (var aKey:String in PA)
aText += aKey + ":" + PA[aKey] + " ";
trace(aText);
// output:
// 0:2 1:3 2:4 3:5 4:4 5:Hello 6:1 7:Foo 8:undefined 9:undefined 10:123abc
// This is a test of for..each..in loop, Array elements are
// enumerated via nextValue and nextNameIndex methods.
aText = "";
for each (var aValue:* in PA)
aText += aValue + " ";
trace(aText);
// output:
// 2 3 4 5 4 Hello 1 Foo undefined undefined 123abc
}
}
}