OO Javascript / jQuery事件点击处理程序

时间:2015-02-08 20:04:39

标签: javascript jquery

我是JS开发的新手,我尝试使用OO Javascript使用"类",我有一个名为" Timeblock"的类,带有它的构造函数:

var Timeblock = function(occupied, on, element) {
  this.occupied = occupied;
  this.on = on;
  this.room_id = 0;
  this.element= element;
}

我用这种方式创建了一个对象:

timeblock = new Timeblock(false, false, $('#element'));

此时一切正常,现在我尝试将click事件监听器添加到其元素var上的类构造函数中,我试过了:

var Timeblock = function(occupied, on, element) {
  this.occupied = occupied;
  this.on = on;
  this.room_id = 0;
  this.element = element;

  timeblock = this;
  this.element.click(function() {
      timeblock.update();
  });
}

Timeblock.prototype.update = function() {
  if (!occupied) {
    this.element.addClass('on');
  }
}

在Chrome中进行调试时,我在this.element.addClass('on');上设置了一个断点,检查我可以阅读的对象this.element: jQuery.fn.init[0],我无法让它工作。

即使在我输入this.element的控制台中,我也会undefined,但如果我输入this.occupied,我会false

我的问题是,为什么我未定义?我怎样才能让它发挥作用?我已经搜索过并搜索过但无法找到任何好的材料来研究OO Javascript。

1 个答案:

答案 0 :(得分:4)

var Timeblock = function(occupied, on, element) {
  this.occupied = occupied;
  this.on = on;
  this.room_id = 0;
  this.element = element;

  var timeblock = this; // need var statement
  this.element.click(function() {
      timeblock.update();
  });
}

Timeblock.prototype.update = function() {
  if (!this.occupied) { // forgot this
    this.element.addClass('on');
  }
}

两个错误。我修复了它们,并留下了评论解释。