Javascript关闭技术

时间:2011-01-11 05:59:42

标签: javascript

  1. 我有一个创建幻灯片的对象。
  2. 我希望在页面上有几个幻灯片
  3. 我有一个幻灯片元素的事件处理程序
  4. 我希望事件处理程序知道哪个幻灯片对象创建了一个单击的项目
  5. -

    slideshow=function(){
    
       var g = document.createElement(...);
    
       ...
    
       g.onclick = f1;
    
       f1 = function(slideshow_instance, event) {
          //EXPLAIN ME HOW TO GET THE slideshow_instance
       }
    
    }
    
    var sl1 = new slideshow();
    var sl2 = new slideshow();
    

    点击已创建的元素幻灯片应返回

      

    SL1

      

    SL2

    我解释得好吗?

2 个答案:

答案 0 :(得分:5)

简短回答,请使用:this

更长的答案,你想要的是:

slideshow=function(){
   /* ... */

   var self = this;    

   f1 = function(event) {
      // do stuff with self.
   }

}

您需要使用this指向self的原因是事件处理程序在调用它们时会更改this的含义。但是在创建对象时this正确引用了正确的对象(幻灯片放映的实例)。我们可以在事件回调期间访问自变量的原因是因为它已被闭包捕获。

如果您需要进一步说明,请随意google或在stackoverflow上搜索上述说明中的任何字词/术语。

答案 1 :(得分:1)

slideshow=function(){

   var g = document.createElement(...);
   g._objRef = this;

   ...

   g.onclick = f1;

   f1 = function(event) {
      alert(this._objRef);
   }

}

var sl1 = new slideshow();
var sl2 = new slideshow();

有点像黑客,但它应该可以解决这个问题。