• 关于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","我叫什么?")

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

  • 相关阅读:
    在docker容器中访问宿主机端口
    springcloud ActiveMQ设置多个并行消费者
    Spring boot activeMQ 设置并行消费
    redis命令行如何清空缓存(windows环境下)
    一文读懂PostgreSQL-12分区表
    PostgreSQL 那些值得尝试的功能,你知道多少?
    Windows如何设置或更改PostgreSQL数据目录位置
    postgresql 致命错误: 已保留的连接位置为执行非复制请求的超级用户预留
    为什么没有插入数据,但已用存储空间会增加
    postgresql批量修改表的owner
  • 原文地址:https://www.cnblogs.com/xlhblogs/p/2302260.html
Copyright © 2020-2023  润新知