从Javascript对象动态获取属性

时间:2018-07-27 01:06:04

标签: javascript class

我的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"类型的Object并从创建的对象访问TEST type属性。 到目前为止,我一直在做以下事情

let s1 = new S()
s1[Object.keys(s1).filter(item=>s1[item] instanceof Test)[0]]

但是,我担心我的Class可能包含15-20个不同类型的变量,并且对于其他每个配置对象重复这样做可能不是一个好习惯。还有其他我不希望使上述工作更轻松的方法吗?

1 个答案:

答案 0 :(得分:0)

我是这样想的。在您的应用程序中定义的类型成为更大的组之前,您的代码将运行良好,并且您希望避免一系列条件约束。

在不了解应用程序如何读取配置文件以及对象的结构的情况下,仅当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()。