2017-04-13 31 views
0

你可以從內部壓入數組文字嗎?在JavaScript中,你可以推入一個自調數組文字

+0

「對象內部數組」的語法無效。對象字面值中的值可以是表達式,但不清楚「{tag:」label「id =」note_title「}'的含義。 – RobG

+0

相關:[對象字面聲明中的自引用](http://stackoverflow.com/q/4616202/218196) –

+0

@Felix Kling,謝謝,我在考慮在我的問題中發佈這個,因爲它與我的相似我正在尋找,但我特別感興趣的數組文字。 var foo = { a:5, b:6, init:function(){ this.c = this.a + this.b; 返回此; } } .init(); – Rick

回答

4

不,你不能這樣做。在Javascript中,items數組(您稱之爲「父數組」)在本地範圍內不存在,直到解釋器完全處理字面聲明,因此您不能在文字聲明中將.push()寫入它。

如果您想根據代碼條件動態修改它,您必須在文字聲明完成後執行此操作。

你可以在字面聲明中聲明一個方法來修改items數組。但是,如果在靜態聲明中調用該方法,那麼items將不會被定義,因爲它的定義尚未完成。該方法需要在數組文字聲明完成後稍後調用。

但是,在您的字面聲明中的自我調用方案中,items將不會被定義,因此您將收到錯誤消息。

您可以擁有一個自調用表達式,該表達式可以運行並返回一些值,然後該值可以是您的字面聲明中某個屬性的值。這只是一個常規的Javascript表達式,如果需要,可以通過表達式計算任何字面聲明值。在ES6中,您甚至可以使用計算的屬性名稱。但是,parent array符號直到字面聲明完成處理完成後纔會存在,因此您無法從解析字面聲明期間評估的表達式中訪問該父符號。

解釋另一種方式,在你上面的代碼,你基本上有:

let items = x; 

其中x是一個很大的對象字面你聲明。

在將任何內容分配給items之前,Javascript將計算整個x。所以,你不能有條件地把東西添加到itemsx正在評估。

+0

感謝數組範圍的澄清,在數組字面聲明的上下文中,這是一個很大的幫助!有沒有更好的方法來實現我想要完成的目標? – Rick

+0

@Arrow--我不完全明白你想要完成什麼。將某些動態設置爲字面聲明的常用方法是在聲明之後使用常規Javascript分配/插入它,這些Javascript可以修改數組/對象或創建一個在聲明後調用的方法。 – jfriend00

+0

我能夠使用自定義事件來觸發文字在解釋器完全處理後觸發。但是,我將所有對「this」的引用都視爲未定義。我認爲自聲明已經確定後,我可以訪問其屬性? – Rick

相關問題