Javascript方法没有看到对象变量

时间:2016-05-03 10:26:02

标签: javascript methods javascript-events javascript-objects

var Shape = function(type)
{
    this.type = type;

    addEventListener("resize", this.align);
}

Shape.prototype.align = function()
{
    alert(this.type);
}

var variable = new Shape('rectangle');

当我调整大小时,我想要警告矩形,但它会提醒未定义

3 个答案:

答案 0 :(得分:1)

您需要通过范围在this事件中使用resize



var Shape = function(type) {
  this.type = type;
  addEventListener("resize", this.align.bind(this));
}

Shape.prototype.align = function() {
  alert(this.type);
}


var variable = new Shape('rectangle');




答案 1 :(得分:0)

您需要使用variable.align(),因为您正在创建新对象。通过这样做,我得到了您所要求的内容:'rectangle'的提醒。

答案 2 :(得分:0)

  

this的值取决于函数的调用方式。它不能在执行期间通过赋值来设置,并且每次调用函数时它可能不同。 ES5引入了绑定方法来设置函数的值,无论它如何被称为[MDN]

Function.prototype.bind()方法创建一个新函数,在调用时,将其this关键字设置为提供的值。



var Shape = function(type) {
  this.type = type;
  addEventListener("resize", function() {
    this.align();
  }.bind(this));
  //OR addEventListener("resize", this.align.bind(this));  
}

Shape.prototype.align = function() {
  alert(this.type);
}


var variable = new Shape('rectangle');