AJax技术

javascript 学习(4)

字号+ 作者:H5之家 来源:H5之家 2016-09-12 15:17 我要评论( )

/** * 和bind一样,不过这个方法一般用做html控件对象的事件处理。所以要传递event对象 * 注意这时候,用到了 Function.call。它与 Function.apply 的不同好像仅仅是对参数形式的定义。 * 如同 java 两个过载的方法

/**
 * 和bind一样,不过这个方法一般用做html控件对象的事件处理。所以要传递event对象
 * 注意这时候,用到了 Function.call。它与 Function.apply 的不同好像仅仅是对参数形式的定义。
 * 如同 java 两个过载的方法。
 */
Function.prototype.bindAsEventListener = function(object) {
  var method = this;
  return function(event) {
    method.call(object, event || window.event);
  }
}

/**
 * 将整数形式RGB颜色值转换为HEX形式
 */
Number.prototype.toColorPart = function() {
  var digits = this.toString(16);
  if (this < 16) return '0' + digits;
  return digits;
}

/**
 * 典型 Ruby 风格的函数,将参数中的方法逐个调用,返回第一个成功执行的方法的返回值
 */
var Try = {
  these: function() {
    var returnValue;
   
    for (var i = 0; i < arguments.length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) {}
    }
   
    return returnValue;
  }
}

/*--------------------------------------------------------------------------*/

/**
 * 一个设计精巧的定时执行器
 * 首先由 Class.create() 创建一个 PeriodicalExecuter 类型,
 * 然后用对象直接量的语法形式设置原型。
 *
 * 需要特别说明的是 rgisterCallback 方法,它调用上面定义的函数原型方法bind, 并传递自己为参数。
 * 之所以这样做,是因为 setTimeout 默认总以 window 对象为当前对象,也就是说,如果 registerCallback 方法定义如下的话:
 *     registerCallback: function() {
 *         setTimeout(this.onTimerEvent, this.frequency * 1000);
 *     }
 * 那么,this.onTimeoutEvent 方法执行失败,因为它无法访问 this.currentlyExecuting 属性。
 * 而使用了bind以后,该方法才能正确的找到this,也就是PeriodicalExecuter的当前实例。
 */
var PeriodicalExecuter = Class.create();
PeriodicalExecuter.prototype = {
  initialize: function(callback, frequency) {
    this.callback = callback;
    this.frequency = frequency;
    this.currentlyExecuting = false;
   
    this.registerCallback();
  },
 
  registerCallback: function() {
    setTimeout(this.onTimerEvent.bind(this), this.frequency * 1000);
  },
 
  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting = true;
        this.callback();
      } finally {
        this.currentlyExecuting = false;
      }
    }
   
    this.registerCallback();
  }
}

/*--------------------------------------------------------------------------*/

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • Ajax 教程 入门 学习

    Ajax 教程 入门 学习

    2016-09-02 14:01

  • 学习javascript:牛人的讲座视频和PPT

    学习javascript:牛人的讲座视频和PPT

    2016-08-22 13:00

  • 最全面的JavaScript调试技巧总结

    最全面的JavaScript调试技巧总结

    2016-08-21 15:01

  • 学习javaweb时的Ajax笔记

    学习javaweb时的Ajax笔记

    2016-08-18 11:00

网友点评
d