ecmascript 6如何通过反射调用静态类方法

时间:2018-02-01 08:59:16

标签: javascript reflection ecmascript-6 static es6-class

所以我想调用一个es 6静态类方法 通过使用字符串className和字符串方法名称进行反射。 我尝试了几种方法。不幸的是,我似乎没有找到正确的方法来做到这一点。

顺便说一下(如下面的评论中所述)我正在寻找一个解决方案,我将从dom属性获取类的名称和方法的名称,因此它们需要是一个字符串。

有人可以帮忙吗?



class a{
	static b(nr){
  	alert('and the answer is' + nr)
  }
}

let aClassName = 'a',
		aMethodeName = 'b',
    theCompleteCall = 'a.b',
    anArgument = 42;

//Reflect.apply(theCompleteCall,anArgument);
//window[aClassName][aMethodeName](anArgument);
//window[theCompleteCall](anArgument);




2 个答案:

答案 0 :(得分:3)

由于letclass没有像您期望的那样在全局范围内声明(read more),因此您需要在可访问的范围内声明您的类,像这样:

window.a = class a{
    static b(nr){
    alert('and the answer is' + nr)
  }
}

let aClassName = 'a',
        aMethodeName = 'b',
    theCompleteCall = 'a.b',
    anArgument = 42;

然后,您可以使用反射进行调用,如下所示:

window[aClassName][aMethodeName](anArgument)

因此,解决方案是在声明范围时提供范围,并通过该范围访问它们。

答案 1 :(得分:-2)

您将变量设置为字符串而不是对象的引用。