ActionScriptのプロパティのデフォルト値としてオブジェクトリテラルを使用している場合、これにより、すべてのインスタンスによって参照される単一のオブジェクトが作成されますか、それともインスタンスごとに新しいオブジェクトが作成されますか?
たとえば、これの複数のインスタンスを作成した場合AddressBook
...
class AddressBook {
private var numbersByName:Object = {};
public function addNumber(name:String, number:String):void {
numbersByName[name] = number;
}
public function getNumber(name:String):String {
return numbersByName[name];
}
...それらは適切に動作しますか、それとも同じnumbersByName
オブジェクトを使用して、1つの変更が他のオブジェクトにも適用されるようにしますか?
各AddressBook
インスタンスが独自のオブジェクトを取得する場合でも、Flashはこの動作を浅くしか適用しない可能性があると考えられます。ネストされたオブジェクトリテラルのデフォルトを考えてみましょう。
class AddressBook {
private var indicies:Object = {
numberToName: {},
nameToNumber: {}
};
public function addNumber(name:String, number:String):void {
indicies.numberToName[number] = name;
indicies.nameToNumber[name] = number;
}
public function getName(number:String):String {
return indicies.numberToName[number];
}
public function getNumber(number:String):String {
return indicies.nameToNumber[number];
}
}
ネストされたリテラル全体がインスタンスごとに新しく作成されますか、それとも異なるindicies
オブジェクトが同じオブジェクトを共有しnumberToName
ますか?
一般に、プロパティがオブジェクトリテラルのデフォルトを持つクラスのプロパティ間にはありますか...
class MyClass {
private var myProperty:Object = { a: [1, 2, 3], b: { d: 4, e: 5 } };
}
...そしてコンストラクターでそれを初期化するもの?
class MyClass {
private var myProperty:Object;
public function MyClass() {
myProperty = { a: [1, 2, 3], b: { d: 4, e: 5 } };
}
}