1

可以使用“点语法”而不使用“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();
4

2 回答 2

3

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

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

  callMethod : function(methodtocall){
       this[methodtocall]()
  },
  init : function(){
      this["callMethod"]("method1");
  }
于 2012-06-20T23:42:48.333 回答
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();
于 2012-06-20T23:45:57.193 回答