[英]Getting properties dynamically from Javascript object
我的javascript項目中有2個函數構造函數。 像下面
function Test(){
this.x = 45;
}
function S(){
this.y=78;
this.f = new Test()
}
現在,我必須根據類型而不是按名稱訪問“ S”的屬性。 這是因為我的系統中有一個配置文件,其中列出了要以對象格式訪問的變量,例如
[<Object of TYPE to create>,<Object of TYPE to access from created object>]
[S<classname>,Test<property type>]
以上意味着我必須創建"S"
類型的對象,並從創建的對象訪問TEST
類型的屬性。 到目前為止,我一直在做下面
let s1 = new S()
s1[Object.keys(s1).filter(item=>s1[item] instanceof Test)[0]]
但是,我擔心我的類可能包含15-20個不同類型的變量,並且對於其他每個配置對象重復這樣做可能不是一個好習慣。 還有其他我不希望使上述工作更輕松的方法嗎?
我是這樣想的。 在您的應用程序中定義的類型成為更大的組之前,您的代碼將運行良好,並且您希望避免一系列條件。
在不了解應用程序如何讀取配置文件以及對象的結構的情況下,以下內容僅在Test()
位於全局范圍內時才起作用。
提取instanceof
的右側以成為變量,而不是硬編碼的函數名。 我們可以做的
s1[Object.keys(s1).filter(item=>s1[item] instanceof eval("Test"))[0]]
要么
s1[Object.keys(s1).filter(item=>s1[item] instanceof window["Test"])[0]]
用從文件中讀取的配置替換"Test"
文字。
第一個方法動態評估以字符串表示的JavaScript代碼,因此它將返回Test()函數。
第二種方法采用在窗口對象中定義的名稱“ Test”的屬性,該屬性為函數Test()。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.