Javascript 闭包技术

标签 javascript

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

-

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

我解释得好吗?

最佳答案

简短回答,使用:this

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

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

   var self = this;    

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

}

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

如果您需要进一步的解释,请随时使用 google 或在 stackoverflow 上搜索上述描述中的任何单词/术语。

关于Javascript 闭包技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4654673/

相关文章:

javascript - 使用 angular js 和 $http 请求登录不起作用

javascript - “nodemon”不被识别为内部或外部命令、可操作程序或批处理文件

javascript - 使用 javascript/jquery 附加 URL?

javascript - Unchecked runtime.lastError : Cannot access contents of url "". 扩展 list 必须请求访问此主机的权限。在 list 3

通过索引号怪癖的javascript字符串分配

javascript - 在 React 中导航到 map 内的上一项

javascript - 如何在文档的特定位置使用纯 javascript 在 HTML 文档中添加元素

javascript - Ajax 每分钟调用一次

javascript - WebSocket.onmessage 什么时候触发?

javascript - 当用户滚动文档 jquery 时停止光标在光标 div 上更改