如果我在ActionScript中將對象文字用作屬性的默認值,是否會創建一個單個對象,該對象由所有實例引用或每個實例都有一個新對象?使用對象文字作爲ActionScript 3類的默認屬性值
例如,如果我創造了這個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
實例確實得到自己的對象,這是可以想象的那一剎那可能只適用於較淺這種行爲。考慮嵌套對象文字的默認:
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 } };
}
}
了var沒有被設置爲靜態的,所以每個新的實施將導致在編譯時在類設置的默認值,其在這種情況下,僅僅是與2個屬性是空對象的對象。 –
但是在這種情況下,我會建議將「indicies」抽象到它自己的類中 –