【问题标题】:Accessing a Javascript prototype function访问 Javascript 原型函数
【发布时间】:2013-07-21 14:51:02
【问题描述】:

我有一个原型函数,比如事件。

原型

Func("input_element_id").event("keyup",function(){
    alert("Works on keyup in an Input!");
}

Func.prototype= {
    keyup: function(func){
         //adding event listener and callback using func
    },
    event: function(e,func) {
         //what to do here to call function "keyup"
    }
};

原型名称在变量e 中。但是我怎样才能使用变量名调用function

我正在这样做,这样传递“keyup keydown”会添加keyup和keydown监听器,这比单独调用每个原型函数要好。

谢谢。

【问题讨论】:

    标签: javascript function input prototype


    【解决方案1】:
    var Func = function(element){
      this.element = element;
    };
    
    Func.prototype = {
        keyup: function(handler){
          this.element.onkeyup = handler;
        },
        event: function(e,handler){
            switch(e){
                case 'keyup':
                  return this.keyup(handler);
                break;
            }
        }
    }
    

    http://jsfiddle.net/YDekw/

    【讨论】:

      【解决方案2】:

      使用this访问接收对象。

      this.keyup(func);
      

      假设一个不错的浏览器或 ES5 shim,看起来你想这样做:

      e.split(" ").forEach(function(f) {
          this[f](func);
      }, this);
      

      请注意,它只是与点运算符一起使用的任何对象,并且可以是任何对象。例如:

      var f = new Func("input_element_id");
      window.event = f.event;
      window.event(); // this is window
      

      【讨论】:

      • e 是一个字符串,表示 OP 想要访问的属性。你应该做this[e](func)
      • .event("keyup",function(){ alert("Works on keyup in an Input!"); }
      • @Harikrishnan:这根本不适合空间分隔。见更新。我正在争论是否要添加它,但看起来我也可以。
      • @miniechi 我想出了进入太空时该怎么做。但不知道当它在变量中时如何访问,或者当 e 是表示 OP 想要访问的属性的字符串时
      • 您的答案是this.keyup(func);。您根本没有阅读问题。不过,使用this 肯定是问题的一部分。无论哪种方式,您的 .forEach() 解决方案都不正确。
      【解决方案3】:

      实现此目的的best way 是:

      events: function(events,func) {
                  this[events](func);
              }
          }
      

      感谢CrazyTrain,正如他在Comments 中提到的那样。

      【讨论】:

      • 那么空间怎么了?
      • @minitech 我没有问关于添加空格的问题。我刚刚提到了我为什么要这样做。
      • 引用您的问题,我正在这样做,因此传递“keyup keydown”将添加keyup和keydown侦听器,这比单独调用每个原型函数要好。。这是有道理的……如果您只想按名称添加事件,而不是为每个事件创建不同的函数,我会使用element.addEventListener(singleEventName, func);。 (如果您愿意,可以使用适当的 IE 兼容性。)为每个函数制作不同的函数可能会有点乏味。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多