• 关于function.call()的问题


    <html>
     <body>
       <script>
        var arry=[1,2,3,4,5,6];
        alert((function(){     
         for(var i=0,ret=arry[0]; i<arry.length; i++)
         {
          ret = Math.max(ret,arry[i])
         }
         return ret;
        })());
        
        alert((function(){ return Math.max.apply(null,arry); })())
        </script>
        
      <input type="button" id="btnSubmit" value="Click me!" />
     
        <script language="javascript" type="text/javascript">
            function ButtonManager(buttonId, message)
            {
             debugger;
                this._message = message;
                document.getElementById(buttonId).onclick = createDelegate(this,this.ShowMessage); //结果:hello  原因:通过function.call()方法,把当前的函数指针赋给ShowMessage
                //document.getElementById(buttonId).onclick = this.ShowMessage;  //结果:undefined  原因:此时ShowMessage里面的this对象window对象
            }
          
            ButtonManager.prototype.ShowMessage=function()
            {
                alert(this._message);
            }
           
            function createDelegate(object, method)
            {
                var delegate = function()
                    {
                        method.call(object);
                    }
                 return delegate;
            }
           
            var btn = new ButtonManager("btnSubmit", "Hello!");
           
           
            var x=10;
        var o ={x:15};
        function foo()
        {
        alert(this.x);
        }
        foo();
        foo.call(o);
        </script>

     </body>
    </html>

    补充:当使用了fn.call(obj)方法以后,fn方法中的this所指向的对象即为obj对象。

     //***********************************//

    function classA()
         {
          alert(this.msg);
         }  
         function classB(name,msg)
         {
          alert(name);
          this.msg = msg;
          classA.call(this);
         }
         classB("kro","我叫什么?")

     //***********************************//

  • 相关阅读:
    线程基础知识归纳
    并发编程情况下几个相应问题简介
    Spring Security的RBAC数据模型嵌入
    Mysql插入中文的字段内容时乱码的解决方法
    部分排序算法总结
    sendEmail 阿里云使用587端口
    linux服务器关闭ipv6 方法
    centos 6.8 安装git 报错
    强大的xargs
    nfs环境搭建报错clnt_create: RPC: Program not registered
  • 原文地址:https://www.cnblogs.com/xlhblogs/p/2302260.html
Copyright © 2020-2023  润新知