Javascript对象:变量global不能在不同的函数中读取



我有这个脚本

var b = {
  c: {
    a: document.querySelector(".a"),
    init: function() {
      this.a.style.backgroundColor = "red";
      this.a.addEventListener("click", b.c.change);
    },
    change: function() {
      this.a.style.width = "100px";
    }
  }
}
b.c.init();
.a {
  width: 10px;
  height: 10px;
  background: black;
  cursor: pointer;
}
<div class="a"></div>

为什么这样。一个"未定义"的风格??

在更改事件处理程序中,this引用dom元素。所以把this.a.style....改成this.style....

var b = {
  c: {
    a: document.querySelector(".a"),
    init: function(){
      this.a.style.backgroundColor="red";
      this.a.addEventListener("click", b.c.change);
    },
    change: function(){
      this.style.width="100px";
    }
  }
}
b.c.init();
.a {
  width: 10px;
  height: 10px;
  background: black;
  cursor: pointer;
}
<div class="a"></div>

首先,在变更事件中,this指向的是DOM元素而不是对象。所以你可以直接使用this来更新样式。

其次,在a中,this将指向c,因此可以直接执行this.change

而不是b.c.change

var b = {
  c: {
    a: document.querySelectorAll(".a"),
    init: function() {
      for (var i = 0; i < this.a.length; i++) {
        this.a[i].style.backgroundColor = "red";
        this.a[i].addEventListener("click", this.change);
      }
    },
    change: function() {
      console.log(this.innerHTML)
      this.style.width = "100px";
    }
  }
}
b.c.init();
.a {
  width: 10px;
  height: 10px;
  background: black;
  cursor: pointer;
  margin: 5px;
  padding: 5px;
}
<div class="a">1</div>
<div class="a">2</div>
<div class="a">3</div>
<div class="a">4</div>
<div class="a">5</div>

试一次就可以了。

var b = {
  c: {
    a: document.getElementById("a"),
    init: function(){
      this.a.style.backgroundColor="red";
      this.a.addEventListener("click", b.c.change);
    },
    change: function(){
      this.style.width="100px";
    }
  }
}
b.c.init();
#a {
  width: 10px;
  height: 10px;
  background: black;
  cursor: pointer;
}
<div id="a"></div>

最新更新