Приведение типов в ActionScript 3
Object(instanceOfOtherObject);
Работает на основе свойства valueOf данного класса (если оно определено). Следовательно, вы можете определить свой класс MyClass следующим образом:
package {
public class MyClass {
private var myArray:Array;
public function MyClass(inputArray:Array = null) {
myArray = (inputArray ? inputArray : new Array());
}
public function valueOf():Array {
return myArray;
}
}
}
Тогда вы сможете выполнить эту типизацию:
var mc:myClass = new MyClass();
var arr:Array = Array(myClass);
Насколько мне известно, обратное не является вариантом, поскольку функция valueOf объекта Array не возвращает объект типа MyClass. Ничто не мешает вам создать CastableArray, который расширяет и переопределяет функцию valueOf Array, чтобы он возвращал экземпляр MyClass, используя конструктор, который я определил выше, хотя вы можете столкнуться с другими проблемами с другими основными компонентами языка, которые ожидают, что Array будет вернуть массив в свойстве valueOf (сравнение объектов приходит на ум).
Я не проводил какого-либо конкретного тестирования с этим следующим предложением, но если MyClass расширяется от Array и не определяет функцию valueOf, все еще возможно выполнить преобразование типов в зависимости от конструктора MyClass и того, что Flash делает в обстоятельства, когда valueOf не определено.