+ -
当前位置:首页 → 问答吧 → 请教一个闭包函数的问题

请教一个闭包函数的问题

时间:2010-05-25

来源:互联网

代码如下,在for循环中,我通过闭包的方式监听事件
问题:如何把监听到的K,return回来呢?
在必包函数中this关键字和原来的this指向不一样了。
复制内容到剪贴板
代码:
    this.init = function()
    {
        var obj = this;
        for(var i=0; i<this.myLink.length; i++)
        {
            (function(k)
            {
                addEvent(obj.myLink[k], 'mouseover', function()
                    {
                        alert(k);
                        //alert(this.myLink);
                    }
                );
            })(i)
        }
    }

作者: feigege   发布时间: 2010-05-25


<ul id="test"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul> <script type="text/javascript"> var test = { myLink : document.getElementById("test").getElementsByTagName("li"), init : function(){ var obj = this; for(var i=0; i<this.myLink.length; i++) { (function(k){ addEvent(obj.myLink[k], 'click', function() { alert(k); alert(obj.myLink[k].innerHTML); } ); })(i) } } } function addEvent(oTar, eType, funcHandler) { if (oTar.addEventListener) { oTar.addEventListener(eType, funcHandler, false); } else if (oTar.attachEvent) { oTar.attachEvent("on" + eType, funcHandler); } else { oTar["on" + eType] = funcHandler; } } test.init(); </script>
 提示:您可以先修改部分代码再运行

作者: cloeft   发布时间: 2010-05-25

引用:
原帖由 cloeft 于 2010-5-25 13:20 发表
[html]

              1
              2
              3
              4
              5
       
   
    var test = {
              myLink : document.getElementById("test").getElementsByTagName("li"),
              init : function(){
                     var obj = this;
                     for(var i=0; i
你好,我想问下我如何将得到的数据返回回来,在当前函数继续使用?因为我在函数中还需要接着用到刚才选择的那个数据。

作者: feigege   发布时间: 2010-05-25

因为蓝色编辑器不是很好用这里补充下
2楼是得到数据,传出去使用,我需要得到数据仍旧继续执行本函数(或是说当前对象)再进行处理,如何实现呢?

作者: feigege   发布时间: 2010-05-25


<ul id="test"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> </ul> <script type="text/javascript"> var test = { myLink : document.getElementById("test").getElementsByTagName("li"), init : function(){ var obj = this; for(var i=0; i<this.myLink.length; i++) { (function(k){ addEvent(obj.myLink[k], 'click', function(){ obj.test.call(obj, k); }); })(i) } }, test : function(k){ alert(k); alert(this.myLink[k].innerHTML); } } function addEvent(oTar, eType, funcHandler) { if (oTar.addEventListener) { oTar.addEventListener(eType, funcHandler, false); } else if (oTar.attachEvent) { oTar.attachEvent("on" + eType, funcHandler); } else { oTar["on" + eType] = funcHandler; } } test.init(); </script>
 提示:您可以先修改部分代码再运行
是这个意思么?

作者: cloeft   发布时间: 2010-05-25

引用:
原帖由 cloeft 于 2010-5-25 14:00 发表
[html]

              1
              2
              3
              4
              5
       
   
    var test = {
              myLink : document.getElementById("test").getElementsByTagName("li"),
              init : function(){
                     var obj = this;
                     for(var i=0; i
是的,谢谢你。

作者: feigege   发布时间: 2010-05-25