Dec
2
2009
Flex i klasy z “wieloma” konstruktorami
Jako, ze AS3 nie umozliwia przeladowania konstruktorow w klasach, malo tego, ukrywa konstruktory klas dziedziczonych, czym bardzo utrudnia tworzenie zlozonych obiektow, postaramy sie to obejsc, metoda “kontrolowany multi injection”.
Zalozmy, ze mamy klase Employee dziedziczaca po Person, ktora chcemy inicjowac na dwa sposoby:
wstrzykiwanie statyczne
public function Employee(name: String, surname: String, reward: uint = 0) { super(name, surname); this._reward = reward; } ... var employee: Employee = new Employee("Jan", "Kowalski", 100);
wstrzykiwanie obiektowe
public function Employee(person: Object, reward: uint = 0) { super(person.name, person.surname); this._reward = reward; } ... var employee: Employee = new Employee( { name : "Jan", surname : "Kowalski" }, 100);
Co musimy zrobic aby klasa Employee umozliwiala obydwie metody inicjacji? Przypomnij sobie jak wyglada obiekt Array. Masz? Zrobimy podobnie.
kontrolowany multi injection
public function Employee(...args) { var name: String; var surname: String; var l: uint = args.length; if (l == 1 && (args[0] is Object)) { name = args[0].name; surname = args[0].surname; } else if (l == 2 && (args[0] is String) && (args[1] is String)) { name = args[0]; surname = args[1]; } if (name && surname) { super(name, surname); } else { throw new Error("Invalid arguments."); } }
Czyz to nie “Multiple Constructors”? Prawie profesjonalnie
