【问题标题】:ecmascript 6 how to call a static class methode by reflectionecmascript 6 如何通过反射调用静态类方法
【发布时间】:2024-04-16 14:20:01
【问题描述】:

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

顺便说一下(如下面的 cmets 所述)我正在寻找一种解决方案,我将从 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);

【问题讨论】:

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


    【解决方案1】:

    由于 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)

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 是的,这是真的,这正是我想解决的问题我将从我的 dom 中获取属性字符串我将编辑我的问题以使其更清楚谢谢