有没有办法使用点语法按名称调用方法?

时间:2012-06-20 23:32:38

标签: javascript

使用“点语法”可以不使用“eval”(邪恶)吗? (我知道我可以用this[methodtocall]()

    var myObj = {

      method1 : function(){
         return 1;
      },
      method2 : function(){
         return 1;
      },
      callMethod : function(methodtocall){
           this.+methodtocall+()
      },
      init : function(){
          this.callMethod("method1");
      }
   }
   myObj.init();

2 个答案:

答案 0 :(得分:3)

不,除了eval或等价物之外,使用点符号成员运算符是不可能的。

如果要保持一致的语法,请始终使用成员运算符的方括号表示法。

  callMethod : function(methodtocall){
       this[methodtocall]()
  },
  init : function(){
      this["callMethod"]("method1");
  }

答案 1 :(得分:0)

尝试这样做:

var myObj = {
  method1 : function(){ return 1; },
  method2 : function(){ return 2; },
  callMethod : function(methodtocall){
       if(typeof methodtocall=== 'function') {
           methodtocall();
       }
  },
  init : function(){ this.callMethod(this.method1); }
}
myObj.init();