2011-10-07 21 views
7

自動版本化只與「derefencing」未定義的結構有關,因爲在JavaScript中如果指定索引或不存在的屬性不會動態創建它嗎?但是這不是autovivification,因爲你必須聲明底層結構首先是對象還是數組?Autovivification和Javascript

+1

這是那種上[programmers.se]屬於編程語言的具體問題。 – zzzzBov

回答

13

命名空間是自動版本化可能在JavaScript中得心應手的一個領域。目前,以「命名空間」的對象,你必須這樣做:

var foo = { bar: { baz: {} } }; 
foo.bar.baz.myValue = 1; 

是由JavaScript支持自動激活,第一行就沒有必要。在JavaScript中爲對象添加任意屬性的能力是由於它是一種動態語言,但不是很自動化。

1

ES6的Proxy可用於實現自動激活,

var tree =() => new Proxy({}, { get: (target, name) => name in target ? target[name] : target[name] = tree() }); 

測試:

var t = tree(); 
t.bar.baz.myValue = 1; 
t.bar.baz.myValue