簡體   English   中英

從Javascript對象動態獲取屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM