如果我在 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
对象,导致一个对象的所有更改也适用于其他对象?
即使每个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 } };
}
}