你可以使用变量的值作为函数名来调用函数吗?

时间:2016-05-21 20:29:28

标签: javascript ecmascript-6

我试图使用变量的值作为函数名来调用类的函数,并想知道这是否真的可行。

说我有以下内容:

    let functionArray = [
      {fctn1 : 'sayHello'},
      {fctn2 : 'sayGoodbye'}
    ];

    module.exports = class subItem extends Item {
      constructor(parent, option) {
        if (!option) return;
        super(parent, option);
        // Below is what I am trying to do. 
        // trying to call 'this.sayHello()'

        this.[functionArray.fctn1];
      }
      sayHello(){ console.log('hello'); }
      sayGoodbye(){ console.log('goodbye'); }
    }

如何使用变量的值作为函数名称来调用对象/类的函数?我很欣赏这可能听起来很奇怪,但希望有人可能知道:)

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您缺少()来调用函数,还需要在[]之前删除点:

this[functionArray.fctn1]();

说明:要访问对象的属性(方法也是属性),可以使用点表示法或方括号:

this.sayHello();
// or
this['sayHello']();

答案 1 :(得分:1)

首先,当使用字符串获取对象的属性时,您不需要.,而是语法只是object['string']。第二个是调用你需要的函数,最后包括括号()

答案 2 :(得分:0)

对于全局函数:

window["functionName"](arguments);

如果是命名空间函数:

window["My"]["Namespace"]["functionName"](arguments);