• javascript改变this指针


    今天写代码时遇到一个问题,this指针的问题,先把代码贴上
    <script type="text/javascript">
    window.onload
    =function()
    {
        
    var m=new main('aaaa');
        m.run();
    }

    var main=function(param)
    {
         
    this.param=param;

         
    this.run=function()
         
    {
         setTimeout(
    this.Change,3000);
         }


         
    this.Change=function()
         
    {
         alert(
    this.param);
         }

    }

    </script>
    这个代码看起来很清晰,但是会报错,原因我想大概就是在隔了三秒执行Change方法时找不到this.param,this.Change的this就指向了window,不是实例m了,整了半天没有整明白,没办法只好上网求助,结果有高手给除了解决方法,修改this指针。再来看新代码:
        <script type="text/javascript">
    window.onload
    =function()
    {
        
    var m=new main('aaaa');
        m.run();
    }

    var main=function(param)
    {
         
    this.param=param;
         
    this.run=function()
         
    {
         
    var self=this;
         setTimeout(self.Change.setThis(self),
    3000);
         }

         
    this.Change=function()
         
    {
         alert(
    this.param);
         }

         Function.prototype.setThis 
    = function(object) 
         

            
    var __method = this
            
    return function() 
            

            __method.apply(object, arguments); 
            }
     ;
         }
    ;
    }

    </script>

    其中添加了一段修改指正的代码,修改指针代码:
     Function.prototype.setThis = function(object) 
         { 
            var __method = this; 
            return function() 
            { 
            __method.apply(object, arguments); 
            } ;
         };
    使用的时候要定义一个变量self=this; 用self来调用。最主要的是不理解apply到底是做啥子用的,只能先记下来,以后慢慢理解!


                                                       第八宗罪Tobin

  • 相关阅读:
    fiximulator
    Maven POM 模板[z]
    Sentinel 实战-控制台篇[z]
    Sentinel 实战-限流篇[z]
    RPC 框架
    如何手写实现简易的Dubbo[z]
    降级、熔断、限流[z]
    Transfix
    Memcached和Memcache安装(64位win7)[z]
    Oracle分区表例子
  • 原文地址:https://www.cnblogs.com/tobin/p/1243514.html
Copyright © 2020-2023  润新知